New: A more responsive desgin for statistic box of home page

Qual: Hook for statistics now match specifications.
This commit is contained in:
Laurent Destailleur 2013-07-19 15:29:40 +02:00
parent d802470aae
commit ed52dd9636
8 changed files with 239 additions and 131 deletions

View File

@ -29,12 +29,12 @@ For users:
- New: Can add an event automatically when a projet is create.
- New: Add option MAIN_GENERATE_DOCUMENT_WITH_PICTURE.
- New: Add option excludethirdparties and onlythirdparties into merge pdf scripts.
- New : [ task #925 ] Add ODT document generation for Tasks in project module.
- New : [ task #924 ] Add numbering rule on task.
- New : [ task #165 ] Add import/export of multiprices.
- New: Add Maghreb regions and departments.
- New: A more responsive desgin for statistic box of home page.
- Qual: Implement same rule for return value of all command line scripts (0 when success, <>0 if error).
- New : [ task #925 ] Add ODT document generation for Tasks in project module
- New : [ task #924 ] Add numbering rule on task
- New : [ task #165 ] Add import/export of multiprices
- New: Add Maghreb regions and departments
For translators:
@ -55,6 +55,7 @@ For developers:
key to use a specific language file.
- New: Make some changes to allow usage of several alternative $dolibarr_main_url_root variables.
Fix also several bugs with old code.
- Qual: All nowrap properties are now using CSS class nowrap.
WARNING: This may create regression for some external modules, but was necessary to make
Dolibarr better:
@ -65,8 +66,8 @@ If your action class for hook was returning a string or an array, instead your m
set $actionclassinstance->results (to return array)
or $actionclassinstance->resprints (to return string)
to return same thing. The return value must be replaced by a "return 0";
Goal is to fix old compatibility code that does not match hook
specification: http://wiki.dolibarr.org/index.php/Hooks_system
Goal is to fix old compatibility code that does not match hook specifications:
http://wiki.dolibarr.org/index.php/Hooks_system
- Some methods object->addline used a first parameter that was object->id, some not. Of course
this was not a good pratice, since object->id is already known so no need to provide it as

View File

@ -131,7 +131,8 @@ class HookManager
// Define type of hook ('output', 'returnvalue' or 'addreplace'). 'addreplace' should be type for all hooks. 'output' and 'returnvalue' are deprecated.
$hooktype='output';
if (preg_match('/^pdf_/',$method)) $hooktype='returnvalue'; // pdf_xxx except pdf_writelinedesc are returnvalue hooks. When there is 2 hooks of this type, only last one win.
if (in_array($method,array('doActions','formObjectOptions','moveUploadedFile','pdf_writelinedesc','paymentsupplierinvoices','printSearchForm', 'formattachOptions', 'formBuilddocLineOptions'))) $hooktype='addreplace';
if (in_array($method,array('addStatisticLine','doActions','formObjectOptions','moveUploadedFile','pdf_writelinedesc','paymentsupplierinvoices',
'printSearchForm', 'formattachOptions', 'formBuilddocLineOptions'))) $hooktype='addreplace';
// Loop on each hook to qualify modules that declared context
$modulealreadyexecuted=array();

View File

@ -109,7 +109,7 @@ $langs->load("orders");
$langs->load("contracts");
//print memory_get_usage();
if ($user->societe_id == 0)
if (empty($user->societe_id))
{
print '<br>';
print '<table class="noborder" width="100%">';
@ -117,132 +117,146 @@ if ($user->societe_id == 0)
print '<th class="liste_titre" colspan="2">'.$langs->trans("DolibarrStateBoard").'</th>';
print '<th class="liste_titre" align="right">&nbsp;</th>';
print '</tr>';
print '<tr><td colspan="3">';
$var=true;
// Condition to be checked for each display line dashboard
$conditions=array(
! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS),
! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS),
! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS),
! empty($conf->adherent->enabled) && $user->rights->adherent->lire,
! empty($conf->product->enabled) && $user->rights->produit->lire,
! empty($conf->service->enabled) && $user->rights->service->lire,
! empty($conf->propal->enabled) && $user->rights->propale->lire,
! empty($conf->commande->enabled) && $user->rights->commande->lire,
! empty($conf->facture->enabled) && $user->rights->facture->lire,
! empty($conf->contrat->enabled) && $user->rights->contrat->activer);
// Class file containing the method load_state_board for each line
$includes=array(DOL_DOCUMENT_ROOT."/societe/class/client.class.php",
DOL_DOCUMENT_ROOT."/comm/prospect/class/prospect.class.php",
DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.class.php",
DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php",
DOL_DOCUMENT_ROOT."/product/class/product.class.php",
DOL_DOCUMENT_ROOT."/product/class/service.class.php",
DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php",
DOL_DOCUMENT_ROOT."/commande/class/commande.class.php",
DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php",
DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
// Name class containing the method load_state_board for each line
$classes=array('Client',
'Prospect',
'Fournisseur',
'Adherent',
'Product',
'Service',
'Propal',
'Commande',
'Facture',
'Contrat');
// Cle array returned by the method load_state_board for each line
$keys=array('customers',
'prospects',
'suppliers',
'members',
'products',
'services',
'proposals',
'orders',
'invoices',
'Contracts');
// Dashboard Icon lines
$icons=array('company',
'company',
'company',
'user',
'product',
'service',
'propal',
'order',
'bill',
'order');
// Translation keyword
$titres=array("ThirdPartyCustomersStats",
"ThirdPartyProspectsStats",
"Suppliers",
"Members",
"Products",
"Services",
"CommercialProposals",
"CustomersOrders",
"BillsCustomers",
"Contracts");
// Dashboard Link lines
$links=array(DOL_URL_ROOT.'/comm/list.php',
DOL_URL_ROOT.'/comm/prospect/list.php',
DOL_URL_ROOT.'/fourn/liste.php',
DOL_URL_ROOT.'/adherents/liste.php?statut=1&mainmenu=members',
DOL_URL_ROOT.'/product/liste.php?type=0&mainmenu=products',
DOL_URL_ROOT.'/product/liste.php?type=1&mainmenu=products',
DOL_URL_ROOT.'/comm/propal/list.php?mainmenu=commercial',
DOL_URL_ROOT.'/commande/liste.php?mainmenu=commercial',
DOL_URL_ROOT.'/compta/facture/list.php?mainmenu=accountancy',
DOL_URL_ROOT.'/contrat/liste.php');
// Translation lang files
$langfile=array("companies",
"prospects",
"suppliers",
"members",
"products",
"produts",
"propal",
"orders",
"bills",
"contracts");
// Loop and displays each line of table
foreach ($keys as $key=>$val)
{
if ($conditions[$key])
{
$classe=$classes[$key];
// Search in cache if load_state_board is already realized
if (! isset($boardloaded[$classe]) || ! is_object($boardloaded[$classe]))
{
include_once $includes[$key]; // Loading a class cost around 1Mb
$board=new $classe($db);
$board->load_state_board($user);
$boardloaded[$classe]=$board;
}
else $board=$boardloaded[$classe];
$var=!$var;
if ($langfile[$key]) $langs->load($langfile[$key]);
$title=$langs->trans($titres[$key]);
print '<tr '.$bc[$var].'><td width="16">'.img_object($title,$icons[$key]).'</td>';
print '<td>'.$title.'</td>';
print '<td align="right"><a href="'.$links[$key].'">'.$board->nb[$val].'</a></td>';
print '</tr>';
}
}
$object=new stdClass();
$parameters=array();
$action='';
$reshook=$hookmanager->executeHooks('addStatisticLine',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if (empty($reshook))
{
// Condition to be checked for each display line dashboard
$conditions=array(
! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS_STATS),
! empty($conf->societe->enabled) && $user->rights->societe->lire && empty($conf->global->SOCIETE_DISABLE_PROSPECTS_STATS),
! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire && empty($conf->global->SOCIETE_DISABLE_SUPPLIERS_STATS),
! empty($conf->adherent->enabled) && $user->rights->adherent->lire,
! empty($conf->product->enabled) && $user->rights->produit->lire,
! empty($conf->service->enabled) && $user->rights->service->lire,
! empty($conf->propal->enabled) && $user->rights->propale->lire,
! empty($conf->commande->enabled) && $user->rights->commande->lire,
! empty($conf->facture->enabled) && $user->rights->facture->lire,
! empty($conf->contrat->enabled) && $user->rights->contrat->activer);
// Class file containing the method load_state_board for each line
$includes=array(DOL_DOCUMENT_ROOT."/societe/class/client.class.php",
DOL_DOCUMENT_ROOT."/comm/prospect/class/prospect.class.php",
DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.class.php",
DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php",
DOL_DOCUMENT_ROOT."/product/class/product.class.php",
DOL_DOCUMENT_ROOT."/product/class/service.class.php",
DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php",
DOL_DOCUMENT_ROOT."/commande/class/commande.class.php",
DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php",
DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
// Name class containing the method load_state_board for each line
$classes=array('Client',
'Prospect',
'Fournisseur',
'Adherent',
'Product',
'Service',
'Propal',
'Commande',
'Facture',
'Contrat');
// Cle array returned by the method load_state_board for each line
$keys=array('customers',
'prospects',
'suppliers',
'members',
'products',
'services',
'proposals',
'orders',
'invoices',
'Contracts');
// Dashboard Icon lines
$icons=array('company',
'company',
'company',
'user',
'product',
'service',
'propal',
'order',
'bill',
'order');
// Translation keyword
$titres=array("ThirdPartyCustomersStats",
"ThirdPartyProspectsStats",
"Suppliers",
"Members",
"Products",
"Services",
"CommercialProposals",
"CustomersOrders",
"BillsCustomers",
"Contracts");
// Dashboard Link lines
$links=array(DOL_URL_ROOT.'/comm/list.php',
DOL_URL_ROOT.'/comm/prospect/list.php',
DOL_URL_ROOT.'/fourn/liste.php',
DOL_URL_ROOT.'/adherents/liste.php?statut=1&mainmenu=members',
DOL_URL_ROOT.'/product/liste.php?type=0&mainmenu=products',
DOL_URL_ROOT.'/product/liste.php?type=1&mainmenu=products',
DOL_URL_ROOT.'/comm/propal/list.php?mainmenu=commercial',
DOL_URL_ROOT.'/commande/liste.php?mainmenu=commercial',
DOL_URL_ROOT.'/compta/facture/list.php?mainmenu=accountancy',
DOL_URL_ROOT.'/contrat/liste.php');
// Translation lang files
$langfile=array("companies",
"prospects",
"suppliers",
"members",
"products",
"produts",
"propal",
"orders",
"bills",
"contracts");
// Loop and displays each line of table
foreach ($keys as $key=>$val)
{
if ($conditions[$key])
{
$classe=$classes[$key];
// Search in cache if load_state_board is already realized
if (! isset($boardloaded[$classe]) || ! is_object($boardloaded[$classe]))
{
include_once $includes[$key]; // Loading a class cost around 1Mb
$board=new $classe($db);
$board->load_state_board($user);
$boardloaded[$classe]=$board;
}
else $board=$boardloaded[$classe];
$var=!$var;
if ($langfile[$key]) $langs->load($langfile[$key]);
$title=$langs->trans($titres[$key]);
/*print '<tr '.$bc[$var].'><td width="16">'.img_object($title,$icons[$key]).'</td>';
print '<td>'.$title.'</td>';
print '<td align="right"><a href="'.$links[$key].'">'.$board->nb[$val].'</a></td>';
print '</tr>';
*/
print '<div class="boxstats">';
print '<a href="'.$links[$key].'" class="nobold nounderline">';
print img_object($title,$icons[$key]).' '.$title.'<br>';
print '</a>';
print '<a href="'.$links[$key].'">';
print $board->nb[$val];
print '</div>';
print '</a>';
}
}
}
print '</td></tr>';
print '</table>';
}

View File

@ -333,7 +333,12 @@ th .button {
.nowrap {
white-space: <?php print ($dol_optimize_smallscreen?'normal':'nowrap'); ?>;
}
.nobold {
font-weight: normal !important;
}
.nounderline {
text-decoration: none;
}
.blockvmenubookmarks .menu_contenu {
background-color: transparent;
@ -1298,6 +1303,19 @@ tr.impair table.nobordernopadding td, tr.pair table.nobordernopadding td { paddi
* Boxes
*/
.boxstats {
<?php print "float: ".$left.";\n"; ?>
margin: 4px;
padding: 4px;
/*-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;
box-shadow: 4px 4px 4px #DDD;
margin-bottom: 8px !important;*/
border: 1px solid #AAA;
text-align: center;
border-radius: 5px;
}
.boxtable {
-moz-box-shadow:2px 4px 2px #cccccc;
-webkit-box-shadow:2px 4px 2px #cccccc;

View File

@ -219,6 +219,12 @@ div.inline-block
.nowrap {
white-space: <?php print ($dol_optimize_smallscreen?'normal':'nowrap'); ?>;
}
.nobold {
font-weight: normal !important;
}
.nounderline {
text-decoration: none;
}
/* ============================================================================== */
@ -1432,6 +1438,19 @@ div.tabBar .noborder {
* Boxes
*/
.boxstats {
<?php print "float: ".$left.";\n"; ?>
margin: 4px;
padding: 4px;
/*-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;
box-shadow: 4px 4px 4px #DDD;
margin-bottom: 8px !important;*/
border: 1px solid #AAA;
text-align: center;
border-radius: 5px;
}
.boxtable {
-moz-box-shadow: 4px 4px 4px #CCC;
-webkit-box-shadow: 4px 4px 4px #CCC;

View File

@ -246,9 +246,13 @@ div.inline-block
.nowrap {
white-space: <?php print ($dol_optimize_smallscreen?'normal':'nowrap'); ?>;
}
/*.dolibarrcombobox {
height: 22px;
}*/
.nobold {
font-weight: normal !important;
}
.nounderline {
text-decoration: none;
}
/* ============================================================================== */
/* Styles to hide objects */
@ -1570,6 +1574,19 @@ tr.pair td.nohover {
* Boxes
*/
.boxstats {
<?php print "float: ".$left.";\n"; ?>
margin: 4px;
padding: 4px;
/*-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;
box-shadow: 4px 4px 4px #DDD;
margin-bottom: 8px !important;*/
border: 1px solid #AAA;
text-align: center;
border-radius: 5px;
}
.box {
padding-right: 0px;
padding-left: 0px;

View File

@ -224,6 +224,12 @@ div.inline-block
.nowrap {
white-space: <?php print ($dol_optimize_smallscreen?'normal':'nowrap'); ?>;
}
.nobold {
font-weight: normal !important;
}
.nounderline {
text-decoration: none;
}
/* ============================================================================== */
@ -1558,6 +1564,19 @@ border: 0px;
* Boxes
*/
.boxstats {
<?php print "float: ".$left.";\n"; ?>
margin: 4px;
padding: 4px;
/*-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;
box-shadow: 4px 4px 4px #DDD;
margin-bottom: 8px !important;*/
border: 1px solid #AAA;
text-align: center;
border-radius: 5px;
}
.box {
padding-right: 0px;
padding-left: 0px;

View File

@ -381,6 +381,12 @@ th .button {
.nowrap {
white-space: <?php print ($dol_optimize_smallscreen?'normal':'nowrap'); ?>;
}
.nobold {
font-weight: normal !important;
}
.nounderline {
text-decoration: none;
}
/* ============================================================================== */
@ -1818,6 +1824,19 @@ div.tabBar .noborder {
* Boxes
*/
.boxstats {
<?php print "float: ".$left.";\n"; ?>
margin: 3px;
padding: 3px;
/*-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;
box-shadow: 4px 4px 4px #DDD;
margin-bottom: 8px !important;*/
border: 1px solid #AAA;
text-align: center;
border-radius: 5px;
}
.boxtable {
-moz-box-shadow: 4px 4px 4px #DDD;
-webkit-box-shadow: 4px 4px 4px #DDD;