Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
146b57700c
@ -4,6 +4,7 @@
|
|||||||
* Copyright (C) 2004-2020 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2020 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||||
|
* Copyright (C) 2021 Frédéric France <frederic.france@netlgic.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -29,6 +30,7 @@ require '../main.inc.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
||||||
|
|
||||||
$hookmanager = new HookManager($db);
|
$hookmanager = new HookManager($db);
|
||||||
|
|
||||||
@ -40,7 +42,24 @@ $langs->loadLangs(array("companies", "members"));
|
|||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
$result = restrictedArea($user, 'adherent');
|
$result = restrictedArea($user, 'adherent');
|
||||||
|
if (!isset($form) || !is_object($form)) {
|
||||||
|
$form = new Form($db);
|
||||||
|
}
|
||||||
|
// Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb)
|
||||||
|
$resultboxes = FormOther::getBoxesArea($user, "2");
|
||||||
|
|
||||||
|
if (GETPOST('addbox')) {
|
||||||
|
// Add box (when submit is done from a form when ajax disabled)
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php';
|
||||||
|
$zone = GETPOST('areacode', 'aZ09');
|
||||||
|
$userid = GETPOST('userid', 'int');
|
||||||
|
$boxorder = GETPOST('boxorder', 'aZ09');
|
||||||
|
$boxorder .= GETPOST('boxcombo', 'aZ09');
|
||||||
|
$result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid);
|
||||||
|
if ($result > 0) {
|
||||||
|
setEventMessages($langs->trans("BoxAdded"), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
@ -52,7 +71,7 @@ $staticmember = new Adherent($db);
|
|||||||
$statictype = new AdherentType($db);
|
$statictype = new AdherentType($db);
|
||||||
$subscriptionstatic = new Subscription($db);
|
$subscriptionstatic = new Subscription($db);
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("MembersArea"), '', 'member');
|
print load_fiche_titre($langs->trans("MembersArea"), $resultboxes['selectboxlist'], 'members');
|
||||||
|
|
||||||
$Adherents = array();
|
$Adherents = array();
|
||||||
$AdherentsAValider = array();
|
$AdherentsAValider = array();
|
||||||
@ -125,10 +144,7 @@ if ($result) {
|
|||||||
$db->free();
|
$db->free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$searchbox = '';
|
||||||
print '<div class="fichecenter"><div class="fichethirdleft">';
|
|
||||||
|
|
||||||
|
|
||||||
if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) { // This is useless due to the global search combo
|
if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) { // This is useless due to the global search combo
|
||||||
// Search contact/address
|
// Search contact/address
|
||||||
if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire) {
|
if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire) {
|
||||||
@ -136,27 +152,27 @@ if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) { // This is usel
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (count($listofsearchfields)) {
|
if (count($listofsearchfields)) {
|
||||||
print '<form method="post" action="'.DOL_URL_ROOT.'/core/search.php">';
|
$searchbox .='<form method="post" action="'.DOL_URL_ROOT.'/core/search.php">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
$searchbox .='<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<div class="div-table-responsive-no-min">';
|
$searchbox .='<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder nohover centpercent">';
|
$searchbox .='<table class="noborder nohover centpercent">';
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($listofsearchfields as $key => $value) {
|
foreach ($listofsearchfields as $key => $value) {
|
||||||
if ($i == 0) {
|
if ($i == 0) {
|
||||||
print '<tr class="liste_titre"><td colspan="3">'.$langs->trans("Search").'</td></tr>';
|
$searchbox .='<tr class="liste_titre"><td colspan="3">'.$langs->trans("Search").'</td></tr>';
|
||||||
}
|
}
|
||||||
print '<tr class="oddeven">';
|
$searchbox .='<tr class="oddeven">';
|
||||||
print '<td class="nowrap"><label for="'.$key.'">'.$langs->trans($value["text"]).'</label>:</td><td><input type="text" class="flat inputsearch" name="'.$key.'" id="'.$key.'" size="18"></td>';
|
$searchbox .='<td class="nowrap"><label for="'.$key.'">'.$langs->trans($value["text"]).'</label>:</td><td><input type="text" class="flat inputsearch" name="'.$key.'" id="'.$key.'" size="18"></td>';
|
||||||
if ($i == 0) {
|
if ($i == 0) {
|
||||||
print '<td rowspan="'.count($listofsearchfields).'"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td>';
|
$searchbox .='<td rowspan="'.count($listofsearchfields).'"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td>';
|
||||||
}
|
}
|
||||||
print '</tr>';
|
$searchbox .='</tr>';
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
print '</table>';
|
$searchbox .='</table>';
|
||||||
print '</div>';
|
$searchbox .='</div>';
|
||||||
print '</form>';
|
$searchbox .='</form>';
|
||||||
print '<br>';
|
$searchbox .='<br>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,12 +180,12 @@ if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) { // This is usel
|
|||||||
/*
|
/*
|
||||||
* Statistics
|
* Statistics
|
||||||
*/
|
*/
|
||||||
|
$boxgraph = '';
|
||||||
if ($conf->use_javascript_ajax) {
|
if ($conf->use_javascript_ajax) {
|
||||||
print '<div class="div-table-responsive-no-min">';
|
$boxgraph .='<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder nohover centpercent">';
|
$boxgraph .='<table class="noborder nohover centpercent">';
|
||||||
print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("Statistics").'</th></tr>';
|
$boxgraph .='<tr class="liste_titre"><th colspan="2">'.$langs->trans("Statistics").'</th></tr>';
|
||||||
print '<tr><td class="center" colspan="2">';
|
$boxgraph .='<tr><td class="center" colspan="2">';
|
||||||
|
|
||||||
$SommeA = 0;
|
$SommeA = 0;
|
||||||
$SommeB = 0;
|
$SommeB = 0;
|
||||||
@ -207,257 +223,38 @@ if ($conf->use_javascript_ajax) {
|
|||||||
$dolgraph->SetType(array('pie'));
|
$dolgraph->SetType(array('pie'));
|
||||||
$dolgraph->setHeight('200');
|
$dolgraph->setHeight('200');
|
||||||
$dolgraph->draw('idgraphstatus');
|
$dolgraph->draw('idgraphstatus');
|
||||||
print $dolgraph->show($total ? 0 : 1);
|
$boxgraph .=$dolgraph->show($total ? 0 : 1);
|
||||||
|
|
||||||
|
$boxgraph .= '</td></tr>';
|
||||||
|
$boxgraph .= '<tr class="liste_total"><td>'.$langs->trans("Total").'</td><td class="right">';
|
||||||
|
$boxgraph .= $SommeA + $SommeB + $SommeC + $SommeD;
|
||||||
|
$boxgraph .= '</td></tr>';
|
||||||
|
$boxgraph .= '</table>';
|
||||||
|
$boxgraph .= '</div>';
|
||||||
|
$boxgraph .= '<br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// boxes
|
||||||
|
print '<div class="clearboth"></div>';
|
||||||
|
print '<div class="fichecenter fichecenterbis">';
|
||||||
|
|
||||||
|
$boxlist = '<div class="twocolumns">';
|
||||||
|
|
||||||
|
$boxlist .= '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
|
||||||
|
$boxlist .= $searchbox;
|
||||||
|
$boxlist .= $boxgraph;
|
||||||
|
$boxlist .= $resultboxes['boxlista'];
|
||||||
|
$boxlist .= '</div>'."\n";
|
||||||
|
|
||||||
|
$boxlist .= '<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
|
||||||
|
$boxlist .= $resultboxes['boxlistb'];
|
||||||
|
$boxlist .= '</div>'."\n";
|
||||||
|
|
||||||
|
$boxlist .= '</div>';
|
||||||
|
|
||||||
|
print $boxlist;
|
||||||
|
|
||||||
print '</td></tr>';
|
|
||||||
print '<tr class="liste_total"><td>'.$langs->trans("Total").'</td><td class="right">';
|
|
||||||
print $SommeA + $SommeB + $SommeC + $SommeD;
|
|
||||||
print '</td></tr>';
|
|
||||||
print '</table>';
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
}
|
|
||||||
|
|
||||||
print '<br>';
|
|
||||||
|
|
||||||
// List of subscription by year
|
|
||||||
$Total = array();
|
|
||||||
$Number = array();
|
|
||||||
$tot = 0;
|
|
||||||
$numb = 0;
|
|
||||||
|
|
||||||
$sql = "SELECT c.subscription, c.dateadh as dateh";
|
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."subscription as c";
|
|
||||||
$sql .= " WHERE d.entity IN (".getEntity('adherent').")";
|
|
||||||
$sql .= " AND d.rowid = c.fk_adherent";
|
|
||||||
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
if ($result) {
|
|
||||||
$num = $db->num_rows($result);
|
|
||||||
$i = 0;
|
|
||||||
while ($i < $num) {
|
|
||||||
$objp = $db->fetch_object($result);
|
|
||||||
$year = dol_print_date($db->jdate($objp->dateh), "%Y");
|
|
||||||
$Total[$year] = (isset($Total[$year]) ? $Total[$year] : 0) + $objp->subscription;
|
|
||||||
$Number[$year] = (isset($Number[$year]) ? $Number[$year] : 0) + 1;
|
|
||||||
$tot += $objp->subscription;
|
|
||||||
$numb += 1;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
|
||||||
print '<table class="noborder centpercent">';
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<th>'.$langs->trans("Year").'</th>';
|
|
||||||
print '<th class="right">'.$langs->trans("Subscriptions").'</th>';
|
|
||||||
print '<th class="right">'.$langs->trans("AmountTotal").'</th>';
|
|
||||||
print '<th class="right">'.$langs->trans("AmountAverage").'</th>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
krsort($Total);
|
|
||||||
$i = 0;
|
|
||||||
foreach ($Total as $key => $value) {
|
|
||||||
if ($i >= 8) {
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print "<td>...</td>";
|
|
||||||
print "<td class=\"right\"></td>";
|
|
||||||
print "<td class=\"right\"></td>";
|
|
||||||
print "<td class=\"right\"></td>";
|
|
||||||
print "</tr>\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print "<td><a href=\"./subscription/list.php?date_select=$key\">$key</a></td>";
|
|
||||||
print "<td class=\"right\">".$Number[$key]."</td>";
|
|
||||||
print "<td class=\"right\">".price($value)."</td>";
|
|
||||||
print "<td class=\"right\">".price(price2num($value / $Number[$key], 'MT'))."</td>";
|
|
||||||
print "</tr>\n";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Total
|
|
||||||
print '<tr class="liste_total">';
|
|
||||||
print '<td>'.$langs->trans("Total").'</td>';
|
|
||||||
print "<td class=\"right\">".$numb."</td>";
|
|
||||||
print '<td class="right">'.price($tot)."</td>";
|
|
||||||
print "<td class=\"right\">".price(price2num($numb > 0 ? ($tot / $numb) : 0, 'MT'))."</td>";
|
|
||||||
print "</tr>\n";
|
|
||||||
print "</table></div>";
|
|
||||||
print "<br>\n";
|
|
||||||
|
|
||||||
|
|
||||||
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Latest modified members
|
|
||||||
*/
|
|
||||||
$max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
|
|
||||||
|
|
||||||
$sql = "SELECT a.rowid, a.ref, a.statut as status, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
|
||||||
$sql .= " a.gender, a.email, a.photo, a.morphy,";
|
|
||||||
$sql .= " a.tms as datem, a.datefin as date_end_subscription,";
|
|
||||||
$sql .= " ta.rowid as typeid, ta.libelle as label, ta.subscription as need_subscription";
|
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as ta";
|
|
||||||
$sql .= " WHERE a.entity IN (".getEntity('adherent').")";
|
|
||||||
$sql .= " AND a.fk_adherent_type = ta.rowid";
|
|
||||||
$sql .= $db->order("a.tms", "DESC");
|
|
||||||
$sql .= $db->plimit($max, 0);
|
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql) {
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
|
||||||
print '<table class="noborder centpercent">';
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<th colspan="4">'.$langs->trans("LastMembersModified", $max).'</th></tr>';
|
|
||||||
|
|
||||||
$num = $db->num_rows($resql);
|
|
||||||
if ($num) {
|
|
||||||
$i = 0;
|
|
||||||
while ($i < $num) {
|
|
||||||
$obj = $db->fetch_object($resql);
|
|
||||||
|
|
||||||
$staticmember->id = $obj->rowid;
|
|
||||||
$staticmember->ref = $obj->ref;
|
|
||||||
$staticmember->lastname = $obj->lastname;
|
|
||||||
$staticmember->firstname = $obj->firstname;
|
|
||||||
$staticmember->gender = $obj->gender;
|
|
||||||
$staticmember->email = $obj->email;
|
|
||||||
$staticmember->photo = $obj->photo;
|
|
||||||
$staticmember->morphy = $obj->morphy;
|
|
||||||
$staticmember->statut = $obj->status;
|
|
||||||
$staticmember->need_subscription = $obj->need_subscription;
|
|
||||||
$staticmember->datefin = $db->jdate($obj->date_end_subscription);
|
|
||||||
if (!empty($obj->fk_soc)) {
|
|
||||||
$staticmember->fk_soc = $obj->fk_soc;
|
|
||||||
$staticmember->fetch_thirdparty();
|
|
||||||
$staticmember->name = $staticmember->thirdparty->name;
|
|
||||||
} else {
|
|
||||||
$staticmember->name = $obj->company;
|
|
||||||
}
|
|
||||||
|
|
||||||
$statictype->id = $obj->typeid;
|
|
||||||
$statictype->label = $obj->label;
|
|
||||||
$statictype->subscription = $obj->need_subscription;
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td class="nowraponall">'.$staticmember->getNomUrl(-1, 32).'</td>';
|
|
||||||
print '<td>'.$statictype->getNomUrl(1, 32).'</td>';
|
|
||||||
print '<td>'.dol_print_date($db->jdate($obj->datem), 'dayhour').'</td>';
|
|
||||||
print '<td class="right">'.$staticmember->getLibStatut(3).'</td>';
|
|
||||||
print '</tr>';
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</table></div>";
|
|
||||||
print "<br>";
|
|
||||||
} else {
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Last modified subscriptions
|
|
||||||
*/
|
|
||||||
$max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
|
|
||||||
|
|
||||||
$sql = "SELECT a.rowid, a.statut as status, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
|
||||||
$sql .= " a.gender, a.email, a.photo, a.morphy,";
|
|
||||||
$sql .= " a.datefin as date_end_subscription,";
|
|
||||||
$sql .= " ta.rowid as typeid, ta.libelle as label, ta.subscription as need_subscription,";
|
|
||||||
$sql .= " c.rowid as cid, c.tms as datem, c.datec as datec, c.dateadh as date_start, c.datef as date_end, c.subscription";
|
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as ta, ".MAIN_DB_PREFIX."subscription as c";
|
|
||||||
$sql .= " WHERE a.entity IN (".getEntity('adherent').")";
|
|
||||||
$sql .= " AND a.fk_adherent_type = ta.rowid";
|
|
||||||
$sql .= " AND c.fk_adherent = a.rowid";
|
|
||||||
$sql .= $db->order("c.tms", "DESC");
|
|
||||||
$sql .= $db->plimit($max, 0);
|
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql) {
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
|
||||||
print '<table class="noborder centpercent">';
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<th colspan="5">'.$langs->trans("LastSubscriptionsModified", $max).'</th></tr>';
|
|
||||||
|
|
||||||
$num = $db->num_rows($resql);
|
|
||||||
if ($num) {
|
|
||||||
$i = 0;
|
|
||||||
while ($i < $num) {
|
|
||||||
$obj = $db->fetch_object($resql);
|
|
||||||
|
|
||||||
$staticmember->id = $obj->rowid;
|
|
||||||
$staticmember->ref = $obj->rowid;
|
|
||||||
$staticmember->lastname = $obj->lastname;
|
|
||||||
$staticmember->firstname = $obj->firstname;
|
|
||||||
$staticmember->gender = $obj->gender;
|
|
||||||
$staticmember->email = $obj->email;
|
|
||||||
$staticmember->photo = $obj->photo;
|
|
||||||
$staticmember->morphy = $obj->morphy;
|
|
||||||
$staticmember->statut = $obj->status;
|
|
||||||
$staticmember->need_subscription = $obj->need_subscription;
|
|
||||||
$staticmember->datefin = $db->jdate($obj->date_end_subscription);
|
|
||||||
if (!empty($obj->fk_soc)) {
|
|
||||||
$staticmember->fk_soc = $obj->fk_soc;
|
|
||||||
$staticmember->fetch_thirdparty();
|
|
||||||
$staticmember->name = $staticmember->thirdparty->name;
|
|
||||||
} else {
|
|
||||||
$staticmember->name = $obj->company;
|
|
||||||
}
|
|
||||||
|
|
||||||
$subscriptionstatic->id = $obj->cid;
|
|
||||||
$subscriptionstatic->ref = $obj->cid;
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td class="nowraponall">'.$subscriptionstatic->getNomUrl(1).'</td>';
|
|
||||||
print '<td class="nowraponall">'.$staticmember->getNomUrl(-1, 32, 'subscription').'</td>';
|
|
||||||
print '<td class="nowraponall">'.get_date_range($db->jdate($obj->date_start), $db->jdate($obj->date_end)).'</td>';
|
|
||||||
print '<td class="right">'.price($obj->subscription).'</td>';
|
|
||||||
//print '<td class="right">'.$staticmember->LibStatut($obj->statut,($obj->subscription=='yes'?1:0),$db->jdate($obj->date_end_subscription),5).'</td>';
|
|
||||||
print '<td class="right nowraponall">'.dol_print_date($db->jdate($obj->datem ? $obj->datem : $obj->datec), 'dayhour').'</td>';
|
|
||||||
print '</tr>';
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</table></div>";
|
|
||||||
print "<br>";
|
|
||||||
} else {
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Summary of members by type
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
|
||||||
print '<table class="noborder centpercent">';
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<th>'.$langs->trans("MembersTypes").'</th>';
|
|
||||||
print '<th class=right>'.$langs->trans("MembersStatusToValid").'</th>';
|
|
||||||
print '<th class=right>'.$langs->trans("OutOfDate").'</th>';
|
|
||||||
print '<th class=right>'.$langs->trans("UpToDate").'</th>';
|
|
||||||
print '<th class=right>'.$langs->trans("MembersStatusResiliated").'</th>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
foreach ($AdherentType as $key => $adhtype) {
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td>'.$adhtype->getNomUrl(1, dol_size(32)).'</td>';
|
|
||||||
print '<td class="right">'.(isset($MemberToValidate[$key]) && $MemberToValidate[$key] > 0 ? $MemberToValidate[$key] : '').' '.$staticmember->LibStatut(-1, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print '<td class="right">'.(isset($MembersValidated[$key]) && ($MembersValidated[$key] - (isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0) > 0) ? $MembersValidated[$key] - (isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0) : '').' '.$staticmember->LibStatut(1, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print '<td class="right">'.(isset($MemberUpToDate[$key]) && $MemberUpToDate[$key] > 0 ? $MemberUpToDate[$key] : '').' '.$staticmember->LibStatut(1, $adhtype->subscription, $now, 3).'</td>';
|
|
||||||
print '<td class="right">'.(isset($MembersResiliated[$key]) && $MembersResiliated[$key] > 0 ? $MembersResiliated[$key] : '').' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
print '<tr class="liste_total">';
|
|
||||||
print '<td class="liste_total">'.$langs->trans("Total").'</td>';
|
|
||||||
print '<td class="liste_total right">'.$SommeA.' '.$staticmember->LibStatut(-1, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print '<td class="liste_total right">'.$SommeB.' '.$staticmember->LibStatut(1, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print '<td class="liste_total right">'.$SommeC.' '.$staticmember->LibStatut(1, $adhtype->subscription, $now, 3).'</td>';
|
|
||||||
print '<td class="liste_total right">'.$SommeD.' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3).'</td>';
|
|
||||||
print '</tr>';
|
|
||||||
|
|
||||||
print "</table>\n";
|
|
||||||
print "</div>";
|
|
||||||
|
|
||||||
print '</div></div></div>';
|
|
||||||
|
|
||||||
$parameters = array('user' => $user);
|
$parameters = array('user' => $user);
|
||||||
$reshook = $hookmanager->executeHooks('dashboardMembers', $parameters, $object); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('dashboardMembers', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||||
|
|||||||
@ -92,7 +92,7 @@ class box_members extends ModeleBoxes
|
|||||||
$sql = "SELECT a.rowid, a.ref, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
$sql = "SELECT a.rowid, a.ref, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
||||||
$sql .= " a.datec, a.tms, a.statut as status, a.datefin as date_end_subscription,";
|
$sql .= " a.datec, a.tms, a.statut as status, a.datefin as date_end_subscription,";
|
||||||
$sql .= ' a.photo, a.email, a.gender, a.morphy,';
|
$sql .= ' a.photo, a.email, a.gender, a.morphy,';
|
||||||
$sql .= " t.subscription";
|
$sql .= " t.subscription, t.libelle as label";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as t";
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as t";
|
||||||
$sql .= " WHERE a.entity IN (".getEntity('member').")";
|
$sql .= " WHERE a.entity IN (".getEntity('member').")";
|
||||||
$sql .= " AND a.fk_adherent_type = t.rowid";
|
$sql .= " AND a.fk_adherent_type = t.rowid";
|
||||||
|
|||||||
277
htdocs/core/boxes/box_members_by_type.php
Normal file
277
htdocs/core/boxes/box_members_by_type.php
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2015-2020 Frederic France <frederic.france@netlogic.fr>
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/boxes/box_members_by_type.php
|
||||||
|
* \ingroup adherent
|
||||||
|
* \brief Module to show box of members
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT . '/core/boxes/modules_boxes.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage the box to show last modofied members
|
||||||
|
*/
|
||||||
|
class box_members_by_type extends ModeleBoxes
|
||||||
|
{
|
||||||
|
public $boxcode = "box_members_by_type";
|
||||||
|
public $boximg = "object_user";
|
||||||
|
public $boxlabel = "BoxMembersByType";
|
||||||
|
public $depends = array("adherent");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var DoliDB Database handler.
|
||||||
|
*/
|
||||||
|
public $db;
|
||||||
|
|
||||||
|
public $param;
|
||||||
|
public $enabled = 1;
|
||||||
|
|
||||||
|
public $info_box_head = array();
|
||||||
|
public $info_box_contents = array();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param string $param More parameters
|
||||||
|
*/
|
||||||
|
public function __construct($db, $param = '')
|
||||||
|
{
|
||||||
|
global $conf, $user;
|
||||||
|
|
||||||
|
$this->db = $db;
|
||||||
|
|
||||||
|
// disable module for such cases
|
||||||
|
$listofmodulesforexternal = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
|
||||||
|
if (!in_array('adherent', $listofmodulesforexternal) && !empty($user->socid)) {
|
||||||
|
$this->enabled = 0; // disabled for external users
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hidden = !($user->rights->adherent->lire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load data into info_box_contents array to show array later.
|
||||||
|
*
|
||||||
|
* @param int $max Maximum number of records to load
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function loadBox($max = 5)
|
||||||
|
{
|
||||||
|
global $user, $langs, $conf;
|
||||||
|
$langs->load("boxes");
|
||||||
|
|
||||||
|
$this->max = $max;
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent_type.class.php';
|
||||||
|
$staticmember = new Adherent($this->db);
|
||||||
|
|
||||||
|
$this->info_box_head = array('text' => $langs->trans("BoxTitleMembersByType", $max));
|
||||||
|
|
||||||
|
if ($user->rights->adherent->lire) {
|
||||||
|
$MembersToValidate = array();
|
||||||
|
$MembersValidated = array();
|
||||||
|
$MemberUpToDate = array();
|
||||||
|
$MembersResiliated = array();
|
||||||
|
|
||||||
|
$SommeA = 0;
|
||||||
|
$SommeB = 0;
|
||||||
|
$SommeC = 0;
|
||||||
|
$SommeD = 0;
|
||||||
|
|
||||||
|
$AdherentType = array();
|
||||||
|
|
||||||
|
// Type of membership
|
||||||
|
$sql = "SELECT t.rowid, t.libelle as label, t.subscription,";
|
||||||
|
$sql .= " d.statut, count(d.rowid) as somme";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "adherent_type as t";
|
||||||
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "adherent as d";
|
||||||
|
$sql .= " ON t.rowid = d.fk_adherent_type";
|
||||||
|
$sql .= " AND d.entity IN (" . getEntity('adherent') . ")";
|
||||||
|
$sql .= " WHERE t.entity IN (" . getEntity('member_type') . ")";
|
||||||
|
$sql .= " GROUP BY t.rowid, t.libelle, t.subscription, d.statut";
|
||||||
|
|
||||||
|
dol_syslog("box_members_by_type::select nb of members per type", LOG_DEBUG);
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $this->db->num_rows($result);
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $num) {
|
||||||
|
$objp = $this->db->fetch_object($result);
|
||||||
|
|
||||||
|
$adhtype = new AdherentType($this->db);
|
||||||
|
$adhtype->id = $objp->rowid;
|
||||||
|
$adhtype->subscription = $objp->subscription;
|
||||||
|
$adhtype->label = $objp->label;
|
||||||
|
$AdherentType[$objp->rowid] = $adhtype;
|
||||||
|
|
||||||
|
if ($objp->statut == -1) {
|
||||||
|
$MembersToValidate[$objp->rowid] = $objp->somme;
|
||||||
|
}
|
||||||
|
if ($objp->statut == 1) {
|
||||||
|
$MembersValidated[$objp->rowid] = $objp->somme;
|
||||||
|
}
|
||||||
|
if ($objp->statut == 0) {
|
||||||
|
$MembersResiliated[$objp->rowid] = $objp->somme;
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$this->db->free($result);
|
||||||
|
$now = dol_now();
|
||||||
|
|
||||||
|
// Members up to date list
|
||||||
|
// current rule: uptodate = the end date is in future whatever is type
|
||||||
|
// old rule: uptodate = if type does not need payment, that end date is null, if type need payment that end date is in future)
|
||||||
|
$sql = "SELECT count(*) as somme , d.fk_adherent_type";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d, " . MAIN_DB_PREFIX . "adherent_type as t";
|
||||||
|
$sql .= " WHERE d.entity IN (" . getEntity('adherent') . ")";
|
||||||
|
$sql .= " AND d.statut = 1 AND (d.datefin >= '" . $this->db->idate($now) . "' OR t.subscription = 0)";
|
||||||
|
$sql .= " AND t.rowid = d.fk_adherent_type";
|
||||||
|
$sql .= " GROUP BY d.fk_adherent_type";
|
||||||
|
|
||||||
|
dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG);
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num2 = $this->db->num_rows($result);
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $num2) {
|
||||||
|
$objp = $this->db->fetch_object($result);
|
||||||
|
$MemberUpToDate[$objp->fk_adherent_type] = $objp->somme;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$this->db->free($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
$line = 0;
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_titre"',
|
||||||
|
'text' => $langs->trans("MembersTypes"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("MembersStatusToValid"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("OutOfDate"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("UpToDate"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("MembersStatusResiliated"),
|
||||||
|
);
|
||||||
|
$line++;
|
||||||
|
foreach ($AdherentType as $key => $adhtype) {
|
||||||
|
$SommeA += isset($MemberToValidate[$key]) ? $MemberToValidate[$key] : 0;
|
||||||
|
$SommeB += isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0) : 0;
|
||||||
|
$SommeC += isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0;
|
||||||
|
$SommeD += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0;
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => $adhtype->getNomUrl(1, dol_size(32)),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => (isset($MemberToValidate[$key]) && $MemberToValidate[$key] > 0 ? $MemberToValidate[$key] : '') . ' ' . $staticmember->LibStatut(-1, $adhtype->subscription, 0, 3),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => (isset($MembersValidated[$key]) && ($MembersValidated[$key] - (isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0) > 0) ? $MembersValidated[$key] - (isset($MemberUpToDate[$key]) ? $MemberUpToDate[$key] : 0) : '') . ' ' . $staticmember->LibStatut(1, $adhtype->subscription, 0, 3),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => (isset($MemberUpToDate[$key]) && $MemberUpToDate[$key] > 0 ? $MemberUpToDate[$key] : '') . ' ' . $staticmember->LibStatut(1, $adhtype->subscription, $now, 3),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => (isset($MembersResiliated[$key]) && $MembersResiliated[$key] > 0 ? $MembersResiliated[$key] : '') . ' ' . $staticmember->LibStatut(0, $adhtype->subscription, 0, 3),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
$line++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num == 0) {
|
||||||
|
$this->info_box_contents[$line][0] = array(
|
||||||
|
'td' => 'class="center"',
|
||||||
|
'text' => $langs->trans("NoRecordedMembersByType"),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total"',
|
||||||
|
'text' => $langs->trans("Total"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => $SommeA.' '.$staticmember->LibStatut(-1, $adhtype->subscription, 0, 3),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => $SommeB.' '.$staticmember->LibStatut(1, $adhtype->subscription, 0, 3),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => $SommeC.' '.$staticmember->LibStatut(1, $adhtype->subscription, $now, 3),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => $SommeD.' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => '',
|
||||||
|
'maxlength' => 500,
|
||||||
|
'text' => ($this->db->error() . ' sql=' . $sql),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => 'class="nohover opacitymedium left"',
|
||||||
|
'text' => $langs->trans("ReadPermissionNotAllowed")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to show box
|
||||||
|
*
|
||||||
|
* @param array $head Array with properties of box title
|
||||||
|
* @param array $contents Array with properties of box lines
|
||||||
|
* @param int $nooutput No print, only return string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function showBox($head = null, $contents = null, $nooutput = 0)
|
||||||
|
{
|
||||||
|
return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
|
||||||
|
}
|
||||||
|
}
|
||||||
197
htdocs/core/boxes/box_members_last_modified.php
Normal file
197
htdocs/core/boxes/box_members_last_modified.php
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2015-2020 Frederic France <frederic.france@netlogic.fr>
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/boxes/box_last_modified_members.php
|
||||||
|
* \ingroup adherent
|
||||||
|
* \brief Module to show box of members
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage the box to show last modofied members
|
||||||
|
*/
|
||||||
|
class box_last_modified_members extends ModeleBoxes
|
||||||
|
{
|
||||||
|
public $boxcode = "box_last_modified_members";
|
||||||
|
public $boximg = "object_user";
|
||||||
|
public $boxlabel = "BoxLastModifiedMembers";
|
||||||
|
public $depends = array("adherent");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var DoliDB Database handler.
|
||||||
|
*/
|
||||||
|
public $db;
|
||||||
|
|
||||||
|
public $param;
|
||||||
|
public $enabled = 1;
|
||||||
|
|
||||||
|
public $info_box_head = array();
|
||||||
|
public $info_box_contents = array();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param string $param More parameters
|
||||||
|
*/
|
||||||
|
public function __construct($db, $param = '')
|
||||||
|
{
|
||||||
|
global $conf, $user;
|
||||||
|
|
||||||
|
$this->db = $db;
|
||||||
|
|
||||||
|
// disable module for such cases
|
||||||
|
$listofmodulesforexternal = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
|
||||||
|
if (!in_array('adherent', $listofmodulesforexternal) && !empty($user->socid)) {
|
||||||
|
$this->enabled = 0; // disabled for external users
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hidden = !($user->rights->adherent->lire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load data into info_box_contents array to show array later.
|
||||||
|
*
|
||||||
|
* @param int $max Maximum number of records to load
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function loadBox($max = 5)
|
||||||
|
{
|
||||||
|
global $user, $langs, $conf;
|
||||||
|
$langs->load("boxes");
|
||||||
|
|
||||||
|
$this->max = $max;
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
||||||
|
$memberstatic = new Adherent($this->db);
|
||||||
|
$statictype = new AdherentType($this->db);
|
||||||
|
|
||||||
|
$this->info_box_head = array('text' => $langs->trans("BoxTitleLastModifiedMembers", $max));
|
||||||
|
|
||||||
|
if ($user->rights->adherent->lire) {
|
||||||
|
$sql = "SELECT a.rowid, a.ref, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
||||||
|
$sql .= " a.datec, a.tms, a.statut as status, a.datefin as date_end_subscription,";
|
||||||
|
$sql .= ' a.photo, a.email, a.gender, a.morphy,';
|
||||||
|
$sql .= " t.rowid as typeid, t.subscription, t.libelle as label";
|
||||||
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as t";
|
||||||
|
$sql .= " WHERE a.entity IN (".getEntity('member').")";
|
||||||
|
$sql .= " AND a.fk_adherent_type = t.rowid";
|
||||||
|
$sql .= " ORDER BY a.tms DESC";
|
||||||
|
$sql .= $this->db->plimit($max, 0);
|
||||||
|
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $this->db->num_rows($result);
|
||||||
|
|
||||||
|
$line = 0;
|
||||||
|
while ($line < $num) {
|
||||||
|
$objp = $this->db->fetch_object($result);
|
||||||
|
$datec = $this->db->jdate($objp->datec);
|
||||||
|
$datem = $this->db->jdate($objp->tms);
|
||||||
|
|
||||||
|
$memberstatic->lastname = $objp->lastname;
|
||||||
|
$memberstatic->firstname = $objp->firstname;
|
||||||
|
$memberstatic->id = $objp->rowid;
|
||||||
|
$memberstatic->ref = $objp->ref;
|
||||||
|
$memberstatic->photo = $objp->photo;
|
||||||
|
$memberstatic->gender = $objp->gender;
|
||||||
|
$memberstatic->email = $objp->email;
|
||||||
|
$memberstatic->morphy = $objp->morphy;
|
||||||
|
$memberstatic->company = $objp->company;
|
||||||
|
$memberstatic->statut = $objp->status;
|
||||||
|
$memberstatic->need_subscription = $objp->subscription;
|
||||||
|
$memberstatic->datefin = $this->db->jdate($objp->date_end_subscription);
|
||||||
|
if (!empty($objp->fk_soc)) {
|
||||||
|
$memberstatic->socid = $objp->fk_soc;
|
||||||
|
$memberstatic->fetch_thirdparty();
|
||||||
|
$memberstatic->name = $memberstatic->thirdparty->name;
|
||||||
|
} else {
|
||||||
|
$memberstatic->name = $objp->company;
|
||||||
|
}
|
||||||
|
$statictype->id = $objp->typeid;
|
||||||
|
$statictype->label = $objp->label;
|
||||||
|
$statictype->subscription = $objp->subscription;
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => $memberstatic->getNomUrl(-1),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => $statictype->getNomUrl(1, 32),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => dol_print_date($datem, "day"),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right" width="18"',
|
||||||
|
'text' => $memberstatic->LibStatut($objp->status, $objp->subscription, $this->db->jdate($objp->date_end_subscription), 3),
|
||||||
|
);
|
||||||
|
|
||||||
|
$line++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num == 0) {
|
||||||
|
$this->info_box_contents[$line][0] = array(
|
||||||
|
'td' => 'class="center"',
|
||||||
|
'text'=>$langs->trans("NoRecordedCustomers"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->free($result);
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => '',
|
||||||
|
'maxlength'=>500,
|
||||||
|
'text' => ($this->db->error().' sql='.$sql),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => 'class="nohover opacitymedium left"',
|
||||||
|
'text' => $langs->trans("ReadPermissionNotAllowed")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to show box
|
||||||
|
*
|
||||||
|
* @param array $head Array with properties of box title
|
||||||
|
* @param array $contents Array with properties of box lines
|
||||||
|
* @param int $nooutput No print, only return string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function showBox($head = null, $contents = null, $nooutput = 0)
|
||||||
|
{
|
||||||
|
return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
|
||||||
|
}
|
||||||
|
}
|
||||||
202
htdocs/core/boxes/box_members_last_subscriptions.php
Normal file
202
htdocs/core/boxes/box_members_last_subscriptions.php
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2015-2020 Frederic France <frederic.france@netlogic.fr>
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/boxes/box_last_members_subscriptions.php
|
||||||
|
* \ingroup adherent
|
||||||
|
* \brief Module to show box of members
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/boxes/modules_boxes.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage the box to show last modofied members
|
||||||
|
*/
|
||||||
|
class box_last_members_subscriptions extends ModeleBoxes
|
||||||
|
{
|
||||||
|
public $boxcode = "box_last_members_subscriptions";
|
||||||
|
public $boximg = "object_user";
|
||||||
|
public $boxlabel = "BoxLastMembersSubscriptions";
|
||||||
|
public $depends = array("adherent");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var DoliDB Database handler.
|
||||||
|
*/
|
||||||
|
public $db;
|
||||||
|
|
||||||
|
public $param;
|
||||||
|
public $enabled = 1;
|
||||||
|
|
||||||
|
public $info_box_head = array();
|
||||||
|
public $info_box_contents = array();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param string $param More parameters
|
||||||
|
*/
|
||||||
|
public function __construct($db, $param = '')
|
||||||
|
{
|
||||||
|
global $conf, $user;
|
||||||
|
|
||||||
|
$this->db = $db;
|
||||||
|
|
||||||
|
// disable module for such cases
|
||||||
|
$listofmodulesforexternal = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
|
||||||
|
if (!in_array('adherent', $listofmodulesforexternal) && !empty($user->socid)) {
|
||||||
|
$this->enabled = 0; // disabled for external users
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hidden = !($user->rights->adherent->lire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load data into info_box_contents array to show array later.
|
||||||
|
*
|
||||||
|
* @param int $max Maximum number of records to load
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function loadBox($max = 5)
|
||||||
|
{
|
||||||
|
global $user, $langs, $conf;
|
||||||
|
$langs->load("boxes");
|
||||||
|
|
||||||
|
$this->max = $max;
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
|
||||||
|
$staticmember = new Adherent($this->db);
|
||||||
|
$statictype = new AdherentType($this->db);
|
||||||
|
$subscriptionstatic = new Subscription($this->db);
|
||||||
|
|
||||||
|
$this->info_box_head = array('text' => $langs->trans("LastSubscriptionsModified", $max));
|
||||||
|
|
||||||
|
if ($user->rights->adherent->lire) {
|
||||||
|
$sql = "SELECT a.rowid, a.statut as status, a.lastname, a.firstname, a.societe as company, a.fk_soc,";
|
||||||
|
$sql .= " a.gender, a.email, a.photo, a.morphy,";
|
||||||
|
$sql .= " a.datefin as date_end_subscription,";
|
||||||
|
$sql .= " ta.rowid as typeid, ta.libelle as label, ta.subscription as need_subscription,";
|
||||||
|
$sql .= " c.rowid as cid, c.tms as datem, c.datec as datec, c.dateadh as date_start, c.datef as date_end, c.subscription";
|
||||||
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as ta, ".MAIN_DB_PREFIX."subscription as c";
|
||||||
|
$sql .= " WHERE a.entity IN (".getEntity('adherent').")";
|
||||||
|
$sql .= " AND a.fk_adherent_type = ta.rowid";
|
||||||
|
$sql .= " AND c.fk_adherent = a.rowid";
|
||||||
|
$sql .= $this->db->order("c.tms", "DESC");
|
||||||
|
$sql .= $this->db->plimit($max, 0);
|
||||||
|
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $this->db->num_rows($result);
|
||||||
|
|
||||||
|
$line = 0;
|
||||||
|
while ($line < $num) {
|
||||||
|
$obj = $this->db->fetch_object($result);
|
||||||
|
$staticmember->id = $obj->rowid;
|
||||||
|
$staticmember->ref = $obj->rowid;
|
||||||
|
$staticmember->lastname = $obj->lastname;
|
||||||
|
$staticmember->firstname = $obj->firstname;
|
||||||
|
$staticmember->gender = $obj->gender;
|
||||||
|
$staticmember->email = $obj->email;
|
||||||
|
$staticmember->photo = $obj->photo;
|
||||||
|
$staticmember->morphy = $obj->morphy;
|
||||||
|
$staticmember->statut = $obj->status;
|
||||||
|
$staticmember->need_subscription = $obj->need_subscription;
|
||||||
|
$staticmember->datefin = $this->db->jdate($obj->date_end_subscription);
|
||||||
|
if (!empty($obj->fk_soc)) {
|
||||||
|
$staticmember->fk_soc = $obj->fk_soc;
|
||||||
|
$staticmember->fetch_thirdparty();
|
||||||
|
$staticmember->name = $staticmember->thirdparty->name;
|
||||||
|
} else {
|
||||||
|
$staticmember->name = $obj->company;
|
||||||
|
}
|
||||||
|
|
||||||
|
$subscriptionstatic->id = $obj->cid;
|
||||||
|
$subscriptionstatic->ref = $obj->cid;
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax100 maxwidth100onsmartphone"',
|
||||||
|
'text' => $subscriptionstatic->getNomUrl(1),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => $staticmember->getNomUrl(-1, 32, 'subscription'),
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => get_date_range($this->db->jdate($obj->date_start), $this->db->jdate($obj->date_end)),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right" width="18"',
|
||||||
|
'text' => price($obj->subscription),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => dol_print_date($this->db->jdate($obj->datem ? $obj->datem : $obj->datec), 'dayhour'),
|
||||||
|
);
|
||||||
|
|
||||||
|
$line++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num == 0) {
|
||||||
|
$this->info_box_contents[$line][0] = array(
|
||||||
|
'td' => 'class="center"',
|
||||||
|
'text'=>$langs->trans("NoRecordedCustomers"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->free($result);
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => '',
|
||||||
|
'maxlength'=>500,
|
||||||
|
'text' => ($this->db->error().' sql='.$sql),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => 'class="nohover opacitymedium left"',
|
||||||
|
'text' => $langs->trans("ReadPermissionNotAllowed")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to show box
|
||||||
|
*
|
||||||
|
* @param array $head Array with properties of box title
|
||||||
|
* @param array $contents Array with properties of box lines
|
||||||
|
* @param int $nooutput No print, only return string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function showBox($head = null, $contents = null, $nooutput = 0)
|
||||||
|
{
|
||||||
|
return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
|
||||||
|
}
|
||||||
|
}
|
||||||
242
htdocs/core/boxes/box_members_subscriptions_by_year.php
Normal file
242
htdocs/core/boxes/box_members_subscriptions_by_year.php
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2015-2021 Frederic France <frederic.france@netlogic.fr>
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/boxes/box_members_subscriptions_by_year.php
|
||||||
|
* \ingroup adherent
|
||||||
|
* \brief Module to show box of members
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT . '/core/boxes/modules_boxes.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage the box to show last modofied members
|
||||||
|
*/
|
||||||
|
class box_members_subscriptions_by_year extends ModeleBoxes
|
||||||
|
{
|
||||||
|
public $boxcode = "box_members_subscriptions_by_year";
|
||||||
|
public $boximg = "object_user";
|
||||||
|
public $boxlabel = "BoxMembersSubscriptionsByYear";
|
||||||
|
public $depends = array("adherent");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var DoliDB Database handler.
|
||||||
|
*/
|
||||||
|
public $db;
|
||||||
|
|
||||||
|
public $param;
|
||||||
|
public $enabled = 1;
|
||||||
|
|
||||||
|
public $info_box_head = array();
|
||||||
|
public $info_box_contents = array();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param string $param More parameters
|
||||||
|
*/
|
||||||
|
public function __construct($db, $param = '')
|
||||||
|
{
|
||||||
|
global $conf, $user;
|
||||||
|
|
||||||
|
$this->db = $db;
|
||||||
|
|
||||||
|
// disable module for such cases
|
||||||
|
$listofmodulesforexternal = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
|
||||||
|
if (!in_array('adherent', $listofmodulesforexternal) && !empty($user->socid)) {
|
||||||
|
$this->enabled = 0; // disabled for external users
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hidden = !($user->rights->adherent->lire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load data into info_box_contents array to show array later.
|
||||||
|
*
|
||||||
|
* @param int $max Maximum number of records to load
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function loadBox($max = 5)
|
||||||
|
{
|
||||||
|
global $user, $langs, $conf;
|
||||||
|
$langs->load("boxes");
|
||||||
|
|
||||||
|
$this->max = $max;
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent_type.class.php';
|
||||||
|
$memberstatic = new Adherent($this->db);
|
||||||
|
$statictype = new AdherentType($this->db);
|
||||||
|
|
||||||
|
$this->info_box_head = array('text' => $langs->trans("BoxTitleMembersSubscriptionsByYear", $max));
|
||||||
|
|
||||||
|
if ($user->rights->adherent->lire) {
|
||||||
|
$num = 0;
|
||||||
|
$line = 0;
|
||||||
|
// List of subscription by year
|
||||||
|
$Total = array();
|
||||||
|
$Number = array();
|
||||||
|
$tot = 0;
|
||||||
|
$numb = 0;
|
||||||
|
|
||||||
|
$sql = "SELECT c.subscription, c.dateadh as dateh";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d, " . MAIN_DB_PREFIX . "subscription as c";
|
||||||
|
$sql .= " WHERE d.entity IN (" . getEntity('adherent') . ")";
|
||||||
|
$sql .= " AND d.rowid = c.fk_adherent";
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $this->db->num_rows($result);
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $num) {
|
||||||
|
$objp = $this->db->fetch_object($result);
|
||||||
|
$year = dol_print_date($this->db->jdate($objp->dateh), "%Y");
|
||||||
|
$Total[$year] = (isset($Total[$year]) ? $Total[$year] : 0) + $objp->subscription;
|
||||||
|
$Number[$year] = (isset($Number[$year]) ? $Number[$year] : 0) + 1;
|
||||||
|
$tot += $objp->subscription;
|
||||||
|
$numb += 1;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$line = 0;
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_titre"',
|
||||||
|
'text' => $langs->trans("Year"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("Subscriptions"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("AmountTotal"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $langs->trans("AmountAverage"),
|
||||||
|
);
|
||||||
|
|
||||||
|
$line++;
|
||||||
|
|
||||||
|
krsort($Total);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($Total as $key => $value) {
|
||||||
|
if ($i >= 8) {
|
||||||
|
// print '<tr class="oddeven">';
|
||||||
|
// print "<td>...</td>";
|
||||||
|
// print "<td class=\"right\"></td>";
|
||||||
|
// print "<td class=\"right\"></td>";
|
||||||
|
// print "<td class=\"right\"></td>";
|
||||||
|
// print "</tr>\n";
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => '...',
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => '',
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => '',
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => '',
|
||||||
|
);
|
||||||
|
$line++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||||
|
'text' => '<a href="./subscription/list.php?date_select='.$key.'">'.$key.'</a>',
|
||||||
|
'asis' => 1,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => $Number[$key],
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => price($value),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="right"',
|
||||||
|
'text' => price(price2num($value / $Number[$key], 'MT')),
|
||||||
|
);
|
||||||
|
$line++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num == 0) {
|
||||||
|
$this->info_box_contents[$line][0] = array(
|
||||||
|
'td' => 'class="center"',
|
||||||
|
'text' => $langs->trans("NoRecordedMembers"),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total"',
|
||||||
|
'text' => $langs->trans("Total"),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => $numb,
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => price($tot),
|
||||||
|
);
|
||||||
|
$this->info_box_contents[$line][] = array(
|
||||||
|
'td' => 'class="liste_total right"',
|
||||||
|
'text' => price(price2num($numb > 0 ? ($tot / $numb) : 0, 'MT')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => '',
|
||||||
|
'maxlength' => 500,
|
||||||
|
'text' => ($this->db->error() . ' sql=' . $sql),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->info_box_contents[0][0] = array(
|
||||||
|
'td' => 'class="nohover opacitymedium left"',
|
||||||
|
'text' => $langs->trans("ReadPermissionNotAllowed")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to show box
|
||||||
|
*
|
||||||
|
* @param array $head Array with properties of box title
|
||||||
|
* @param array $contents Array with properties of box lines
|
||||||
|
* @param int $nooutput No print, only return string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function showBox($head = null, $contents = null, $nooutput = 0)
|
||||||
|
{
|
||||||
|
return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -40,6 +40,8 @@ class InfoBox
|
|||||||
if (empty($conf->global->MAIN_FEATURES_LEVEL) || $conf->global->MAIN_FEATURES_LEVEL < 2) {
|
if (empty($conf->global->MAIN_FEATURES_LEVEL) || $conf->global->MAIN_FEATURES_LEVEL < 2) {
|
||||||
return array(
|
return array(
|
||||||
0 => 'Home',
|
0 => 'Home',
|
||||||
|
1 => 'userhome',
|
||||||
|
2 => 'membersindex',
|
||||||
3 => 'thirdpartiesindex',
|
3 => 'thirdpartiesindex',
|
||||||
27 => 'AccountancyHome'
|
27 => 'AccountancyHome'
|
||||||
);
|
);
|
||||||
|
|||||||
@ -193,7 +193,11 @@ class modAdherent extends DolibarrModules
|
|||||||
//-------
|
//-------
|
||||||
$this->boxes = array(
|
$this->boxes = array(
|
||||||
0 => array('file'=>'box_members.php', 'enabledbydefaulton'=>'Home'),
|
0 => array('file'=>'box_members.php', 'enabledbydefaulton'=>'Home'),
|
||||||
2=>array('file'=>'box_birthdays_members.php', 'enabledbydefaulton'=>'Home')
|
2 => array('file'=>'box_birthdays_members.php', 'enabledbydefaulton'=>'Home'),
|
||||||
|
3 => array('file'=>'box_members_last_modified', 'enabledbydefaulton'=>'membersindex'),
|
||||||
|
4 => array('file'=>'box_members_last_subscriptions', 'enabledbydefaulton'=>'membersindex'),
|
||||||
|
5 => array('file'=>'box_members_subscriptions_by_year', 'enabledbydefaulton'=>'membersindex'),
|
||||||
|
6 => array('file'=>'box_members_by_type', 'enabledbydefaulton'=>'membersindex'),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Permissions
|
// Permissions
|
||||||
@ -405,13 +409,11 @@ class modAdherent extends DolibarrModules
|
|||||||
$dirodt=DOL_DATA_ROOT.'/doctemplates/orders';
|
$dirodt=DOL_DATA_ROOT.'/doctemplates/orders';
|
||||||
$dest=$dirodt.'/template_order.odt';
|
$dest=$dirodt.'/template_order.odt';
|
||||||
|
|
||||||
if (file_exists($src) && ! file_exists($dest))
|
if (file_exists($src) && ! file_exists($dest)) {
|
||||||
{
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
dol_mkdir($dirodt);
|
dol_mkdir($dirodt);
|
||||||
$result=dol_copy($src,$dest,0,0);
|
$result=dol_copy($src,$dest,0,0);
|
||||||
if ($result < 0)
|
if ($result < 0) {
|
||||||
{
|
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
$this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest);
|
$this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -18,9 +18,12 @@ BoxLastActions=Latest actions
|
|||||||
BoxLastContracts=Latest contracts
|
BoxLastContracts=Latest contracts
|
||||||
BoxLastContacts=Latest contacts/addresses
|
BoxLastContacts=Latest contacts/addresses
|
||||||
BoxLastMembers=Latest members
|
BoxLastMembers=Latest members
|
||||||
|
BoxLastModifiedMembers=Latest modified members
|
||||||
BoxFicheInter=Latest interventions
|
BoxFicheInter=Latest interventions
|
||||||
BoxCurrentAccounts=Open accounts balance
|
BoxCurrentAccounts=Open accounts balance
|
||||||
BoxTitleMemberNextBirthdays=Birthdays of this month (members)
|
BoxTitleMemberNextBirthdays=Birthdays of this month (members)
|
||||||
|
BoxTitleMembersByType=Members by type
|
||||||
|
BoxTitleMembersSubscriptionsByYear=Members Subscriptions by year
|
||||||
BoxTitleLastRssInfos=Latest %s news from %s
|
BoxTitleLastRssInfos=Latest %s news from %s
|
||||||
BoxTitleLastProducts=Products/Services: last %s modified
|
BoxTitleLastProducts=Products/Services: last %s modified
|
||||||
BoxTitleProductsAlertStock=Products: stock alert
|
BoxTitleProductsAlertStock=Products: stock alert
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
||||||
|
|
||||||
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'userhome'; // To manage different context of search
|
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'userhome'; // To manage different context of search
|
||||||
|
|
||||||
@ -52,7 +53,24 @@ $fuserstatic = new User($db);
|
|||||||
|
|
||||||
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
|
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
|
||||||
$hookmanager->initHooks(array('userhome'));
|
$hookmanager->initHooks(array('userhome'));
|
||||||
|
if (!isset($form) || !is_object($form)) {
|
||||||
|
$form = new Form($db);
|
||||||
|
}
|
||||||
|
// Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb)
|
||||||
|
$resultboxes = FormOther::getBoxesArea($user, "1");
|
||||||
|
|
||||||
|
if (GETPOST('addbox')) {
|
||||||
|
// Add box (when submit is done from a form when ajax disabled)
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php';
|
||||||
|
$zone = GETPOST('areacode', 'aZ09');
|
||||||
|
$userid = GETPOST('userid', 'int');
|
||||||
|
$boxorder = GETPOST('boxorder', 'aZ09');
|
||||||
|
$boxorder .= GETPOST('boxcombo', 'aZ09');
|
||||||
|
$result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid);
|
||||||
|
if ($result > 0) {
|
||||||
|
setEventMessages($langs->trans("BoxAdded"), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
@ -61,40 +79,35 @@ $hookmanager->initHooks(array('userhome'));
|
|||||||
llxHeader();
|
llxHeader();
|
||||||
|
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("MenuUsersAndGroups"), '', 'user');
|
print load_fiche_titre($langs->trans("MenuUsersAndGroups"), $resultboxes['selectboxlist'], 'user');
|
||||||
|
|
||||||
|
|
||||||
print '<div class="fichecenter"><div class="fichethirdleft">';
|
|
||||||
|
|
||||||
|
|
||||||
// Search User
|
// Search User
|
||||||
print '<form method="post" action="'.DOL_URL_ROOT.'/core/search.php">';
|
$searchbox = '<form method="post" action="'.DOL_URL_ROOT.'/core/search.php">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
$searchbox .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
|
||||||
print '<table class="noborder nohover centpercent">';
|
$searchbox .= '<table class="noborder nohover centpercent">';
|
||||||
print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Search").'</td></tr>';
|
$searchbox .= '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Search").'</td></tr>';
|
||||||
print '<tr><td>';
|
$searchbox .= '<tr><td>';
|
||||||
print $langs->trans("User").':</td><td><input class="flat inputsearch" type="text" name="search_user" size="18"></td></tr>';
|
$searchbox .= $langs->trans("User").':</td><td><input class="flat inputsearch" type="text" name="search_user" size="18"></td></tr>';
|
||||||
|
|
||||||
// Search Group
|
// Search Group
|
||||||
if ($canreadperms) {
|
if ($canreadperms) {
|
||||||
print '<tr><td>';
|
$searchbox .= '<tr><td>';
|
||||||
print $langs->trans("Group").':</td><td><input class="flat inputsearch" type="text" name="search_group" size="18"></td></tr>';
|
$searchbox .= $langs->trans("Group").':</td><td><input class="flat inputsearch" type="text" name="search_group" size="18"></td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<tr><td class="center" colspan="2"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td></tr>';
|
$searchbox .= '<tr><td class="center" colspan="2"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td></tr>';
|
||||||
print "</table><br>\n";
|
$searchbox .= "</table><br>\n";
|
||||||
|
|
||||||
print '</form>';
|
$searchbox .= '</form>';
|
||||||
|
|
||||||
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Latest created users
|
* Latest created users
|
||||||
*/
|
*/
|
||||||
$max = 10;
|
$max = 10;
|
||||||
|
$lastcreatedbox = '';
|
||||||
$sql = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.admin, u.login, u.fk_soc, u.datec, u.statut";
|
$sql = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.admin, u.login, u.fk_soc, u.datec, u.statut";
|
||||||
$sql .= ", u.entity";
|
$sql .= ", u.entity";
|
||||||
$sql .= ", u.ldap_sid";
|
$sql .= ", u.ldap_sid";
|
||||||
@ -124,11 +137,11 @@ $resql = $db->query($sql);
|
|||||||
if ($resql) {
|
if ($resql) {
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
$lastcreatedbox .='<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder centpercent">';
|
$lastcreatedbox .='<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre"><td colspan="3">'.$langs->trans("LastUsersCreated", min($num, $max)).'</td>';
|
$lastcreatedbox .='<tr class="liste_titre"><td colspan="3">'.$langs->trans("LastUsersCreated", min($num, $max)).'</td>';
|
||||||
print '<td class="right" colspan="2"><a class="commonlink" href="'.DOL_URL_ROOT.'/user/list.php?sortfield=u.datec&sortorder=DESC">'.$langs->trans("FullList").'</td>';
|
$lastcreatedbox .='<td class="right" colspan="2"><a class="commonlink" href="'.DOL_URL_ROOT.'/user/list.php?sortfield=u.datec&sortorder=DESC">'.$langs->trans("FullList").'</td>';
|
||||||
print '</tr>'."\n";
|
$lastcreatedbox .='</tr>'."\n";
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
while ($i < $num && $i < $max) {
|
while ($i < $num && $i < $max) {
|
||||||
@ -149,24 +162,24 @@ if ($resql) {
|
|||||||
$companystatic->code_client = $obj->code_client;
|
$companystatic->code_client = $obj->code_client;
|
||||||
$companystatic->canvas = $obj->canvas;
|
$companystatic->canvas = $obj->canvas;
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
$lastcreatedbox .='<tr class="oddeven">';
|
||||||
print '<td class="nowraponall">';
|
$lastcreatedbox .='<td class="nowraponall">';
|
||||||
print $fuserstatic->getNomUrl(-1);
|
$lastcreatedbox .=$fuserstatic->getNomUrl(-1);
|
||||||
if (!empty($conf->multicompany->enabled) && $obj->admin && !$obj->entity) {
|
if (!empty($conf->multicompany->enabled) && $obj->admin && !$obj->entity) {
|
||||||
print img_picto($langs->trans("SuperAdministrator"), 'redstar');
|
$lastcreatedbox .=img_picto($langs->trans("SuperAdministrator"), 'redstar');
|
||||||
} elseif ($obj->admin) {
|
} elseif ($obj->admin) {
|
||||||
print img_picto($langs->trans("Administrator"), 'star');
|
$lastcreatedbox .=img_picto($langs->trans("Administrator"), 'star');
|
||||||
}
|
}
|
||||||
print "</td>";
|
$lastcreatedbox .="</td>";
|
||||||
print '<td>'.$obj->login.'</td>';
|
$lastcreatedbox .='<td>'.$obj->login.'</td>';
|
||||||
print "<td>";
|
$lastcreatedbox .="<td>";
|
||||||
if ($obj->fk_soc) {
|
if ($obj->fk_soc) {
|
||||||
print $companystatic->getNomUrl(1);
|
$lastcreatedbox .=$companystatic->getNomUrl(1);
|
||||||
} else {
|
} else {
|
||||||
print $langs->trans("InternalUser");
|
$lastcreatedbox .=$langs->trans("InternalUser");
|
||||||
}
|
}
|
||||||
if ($obj->ldap_sid) {
|
if ($obj->ldap_sid) {
|
||||||
print ' ('.$langs->trans("DomainUser").')';
|
$lastcreatedbox .=' ('.$langs->trans("DomainUser").')';
|
||||||
}
|
}
|
||||||
|
|
||||||
$entity = $obj->entity;
|
$entity = $obj->entity;
|
||||||
@ -180,19 +193,19 @@ if ($resql) {
|
|||||||
$entitystring = $mc->label;
|
$entitystring = $mc->label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print ($entitystring ? ' ('.$entitystring.')' : '');
|
$lastcreatedbox .=($entitystring ? ' ('.$entitystring.')' : '');
|
||||||
|
|
||||||
print '</td>';
|
$lastcreatedbox .='</td>';
|
||||||
print '<td class="center nowrap">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
|
$lastcreatedbox .='<td class="center nowrap">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
|
||||||
print '<td class="right">';
|
$lastcreatedbox .='<td class="right">';
|
||||||
print $fuserstatic->getLibStatut(3);
|
$lastcreatedbox .=$fuserstatic->getLibStatut(3);
|
||||||
print '</td>';
|
$lastcreatedbox .='</td>';
|
||||||
|
|
||||||
print '</tr>';
|
$lastcreatedbox .='</tr>';
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
print "</table>";
|
$lastcreatedbox .="</table>";
|
||||||
print "</div><br>";
|
$lastcreatedbox .="</div><br>";
|
||||||
|
|
||||||
$db->free($resql);
|
$db->free($resql);
|
||||||
} else {
|
} else {
|
||||||
@ -203,6 +216,7 @@ if ($resql) {
|
|||||||
/*
|
/*
|
||||||
* Last groups created
|
* Last groups created
|
||||||
*/
|
*/
|
||||||
|
$lastgroupbox = '';
|
||||||
if ($canreadperms) {
|
if ($canreadperms) {
|
||||||
$max = 5;
|
$max = 5;
|
||||||
|
|
||||||
@ -224,11 +238,11 @@ if ($canreadperms) {
|
|||||||
}
|
}
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
$lastgroupbox .='<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder centpercent">';
|
$lastgroupbox .='<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre"><td colspan="'.$colspan.'">'.$langs->trans("LastGroupsCreated", ($num ? $num : $max)).'</td>';
|
$lastgroupbox .='<tr class="liste_titre"><td colspan="'.$colspan.'">'.$langs->trans("LastGroupsCreated", ($num ? $num : $max)).'</td>';
|
||||||
print '<td class="right"><a class="commonlink" href="'.DOL_URL_ROOT.'/user/group/list.php?sortfield=g.datec&sortorder=DESC">'.$langs->trans("FullList").'</td>';
|
$lastgroupbox .='<td class="right"><a class="commonlink" href="'.DOL_URL_ROOT.'/user/group/list.php?sortfield=g.datec&sortorder=DESC">'.$langs->trans("FullList").'</td>';
|
||||||
print '</tr>';
|
$lastgroupbox .='</tr>';
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
$grouptemp = new UserGroup($db);
|
$grouptemp = new UserGroup($db);
|
||||||
@ -240,25 +254,25 @@ if ($canreadperms) {
|
|||||||
$grouptemp->name = $obj->name;
|
$grouptemp->name = $obj->name;
|
||||||
$grouptemp->note = $obj->note;
|
$grouptemp->note = $obj->note;
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
$lastgroupbox .='<tr class="oddeven">';
|
||||||
print '<td>';
|
$lastgroupbox .='<td>';
|
||||||
print $grouptemp->getNomUrl(1);
|
$lastgroupbox .=$grouptemp->getNomUrl(1);
|
||||||
if (!$obj->entity) {
|
if (!$obj->entity) {
|
||||||
print img_picto($langs->trans("GlobalGroup"), 'redstar');
|
$lastgroupbox .=img_picto($langs->trans("GlobalGroup"), 'redstar');
|
||||||
}
|
}
|
||||||
print "</td>";
|
$lastgroupbox .="</td>";
|
||||||
if (!empty($conf->multicompany->enabled) && is_object($mc)) {
|
if (!empty($conf->multicompany->enabled) && is_object($mc)) {
|
||||||
$mc->getInfo($obj->entity);
|
$mc->getInfo($obj->entity);
|
||||||
print '<td>';
|
$lastgroupbox .='<td>';
|
||||||
print $mc->label;
|
$lastgroupbox .=$mc->label;
|
||||||
print '</td>';
|
$lastgroupbox .='</td>';
|
||||||
}
|
}
|
||||||
print '<td class="nowrap right">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
|
$lastgroupbox .='<td class="nowrap right">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
|
||||||
print "</tr>";
|
$lastgroupbox .="</tr>";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
print "</table>";
|
$lastgroupbox .= "</table>";
|
||||||
print "</div><br>";
|
$lastgroupbox .= "</div><br>";
|
||||||
|
|
||||||
$db->free($resql);
|
$db->free($resql);
|
||||||
} else {
|
} else {
|
||||||
@ -266,7 +280,28 @@ if ($canreadperms) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</div></div></div>';
|
// boxes
|
||||||
|
print '<div class="clearboth"></div>';
|
||||||
|
print '<div class="fichecenter fichecenterbis">';
|
||||||
|
|
||||||
|
$boxlist = '<div class="twocolumns">';
|
||||||
|
|
||||||
|
$boxlist .= '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
|
||||||
|
$boxlist .= $searchbox;
|
||||||
|
$boxlist .= $resultboxes['boxlista'];
|
||||||
|
$boxlist .= '</div>'."\n";
|
||||||
|
|
||||||
|
$boxlist .= '<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
|
||||||
|
$boxlist .= $lastcreatedbox;
|
||||||
|
$boxlist .= $lastgroupbox;
|
||||||
|
$boxlist .= $resultboxes['boxlistb'];
|
||||||
|
$boxlist .= '</div>'."\n";
|
||||||
|
|
||||||
|
$boxlist .= '</div>';
|
||||||
|
|
||||||
|
print $boxlist;
|
||||||
|
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
|
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
|
||||||
$parameters = array('user' => $user);
|
$parameters = array('user' => $user);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user