Start to work on a multiselect component to select which fields to show
into dolibarr lists.
This commit is contained in:
parent
82428fea68
commit
f29c03c922
@ -4591,34 +4591,36 @@ class Form
|
||||
{
|
||||
global $conf, $langs;
|
||||
|
||||
$out = '';
|
||||
|
||||
// Add code for jquery to use multiselect
|
||||
if (! empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT'))
|
||||
{
|
||||
$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT;
|
||||
print '<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
$out.='<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
<script type="text/javascript">
|
||||
function formatResult(record) {'."\n";
|
||||
if ($elemtype == 'category')
|
||||
{
|
||||
print ' //return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
|
||||
$out.=' //return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
|
||||
return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
|
||||
}
|
||||
else
|
||||
{
|
||||
print 'return record.text;';
|
||||
$out.='return record.text;';
|
||||
}
|
||||
print ' };
|
||||
$out.= ' };
|
||||
function formatSelection(record) {'."\n";
|
||||
if ($elemtype == 'category')
|
||||
{
|
||||
print ' //return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
|
||||
$out.=' //return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
|
||||
return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
|
||||
}
|
||||
else
|
||||
{
|
||||
print 'return record.text;';
|
||||
$out.='return record.text;';
|
||||
}
|
||||
print ' };
|
||||
$out.= ' };
|
||||
$(document).ready(function () {
|
||||
$(\'#'.$htmlname.'\').'.$tmpplugin.'({
|
||||
dir: \'ltr\',
|
||||
@ -4636,7 +4638,7 @@ class Form
|
||||
// Try also magic suggest
|
||||
|
||||
// Add data-role="none" to disable jmobile decoration
|
||||
$out = '<select data-role="none" id="'.$htmlname.'" class="multiselect'.($morecss?' '.$morecss:'').'" multiple name="'.$htmlname.'[]"'.($moreattrib?' '.$moreattrib:'').($width?' style="width: '.(preg_match('/%/',$width)?$width:$width.'px').'"':'').'>'."\n";
|
||||
$out .= '<select data-role="none" id="'.$htmlname.'" class="multiselect'.($morecss?' '.$morecss:'').'" multiple name="'.$htmlname.'[]"'.($moreattrib?' '.$moreattrib:'').($width?' style="width: '.(preg_match('/%/',$width)?$width:$width.'px').'"':'').'>'."\n";
|
||||
if (is_array($array) && ! empty($array))
|
||||
{
|
||||
if ($value_as_key) $array=array_combine($array, $array);
|
||||
@ -4665,6 +4667,84 @@ class Form
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Show a multiselect form from an array.
|
||||
*
|
||||
* @param string $htmlname Name of select
|
||||
* @param array $array Array with array to show
|
||||
* @return string HTML multiselect string
|
||||
* @see selectarray
|
||||
*/
|
||||
static function multiSelectArrayWithCheckbox($htmlname, $array)
|
||||
{
|
||||
$lis='';
|
||||
$liststring='';
|
||||
|
||||
foreach($array as $key => $val)
|
||||
{
|
||||
if (isset($val['cond']) && ! $val['cond']) continue;
|
||||
if ($val['label'])
|
||||
{
|
||||
$lis.='<li><input type="checkbox" value="'.$key.'"'.($val['checked']?' checked="checked"':'').'/>'.dol_escape_htmltag($val['label']).'</li>';
|
||||
$liststring.=$key.',';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$out ='<!-- Component multiSelectArrayWithCheckbox '.$htmlname.' -->
|
||||
|
||||
<dl class="dropdown">
|
||||
|
||||
<dt>
|
||||
<a href="#">
|
||||
'.img_picto('','list').'
|
||||
<input type="hidden" class="'.$htmlname.'" name="'.$htmlname.'" value="'.$liststring.'">
|
||||
</a>
|
||||
</dt>
|
||||
|
||||
<dd>
|
||||
<div class="multiselectcheckbox'.$htmlname.'">
|
||||
<ul>
|
||||
'.$lis.'
|
||||
</ul>
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(".dropdown dt a").on(\'click\', function () {
|
||||
$(".dropdown dd ul").slideToggle(\'fast\');
|
||||
});
|
||||
|
||||
$(".dropdown dd ul li a").on(\'click\', function () {
|
||||
$(".dropdown dd ul").hide();
|
||||
});
|
||||
|
||||
function getSelectedValue(id) {
|
||||
return $("#" + id).find("dt a span.value").html();
|
||||
}
|
||||
|
||||
$(document).bind(\'click\', function (e) {
|
||||
var $clicked = $(e.target);
|
||||
if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide();
|
||||
});
|
||||
|
||||
$(\'.multiselectcheckbox'.$htmlname.' input[type="checkbox"]\').on(\'click\', function () {
|
||||
|
||||
var title = $(this).val() + ",";
|
||||
|
||||
if ($(this).is(\':checked\')) {
|
||||
$(\'.'.$htmlname.'\').val(title + $(\'.'.$htmlname.'\').val());
|
||||
}
|
||||
else {
|
||||
$(\'.'.$htmlname.'\').val( $(\'.'.$htmlname.'\').val().replace(title, \'\') )
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
';
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render list of categories linked to object with id $id and type $type
|
||||
|
||||
@ -208,9 +208,9 @@ $title=$langs->trans("ListOfThirdParties");
|
||||
|
||||
$sql = "SELECT s.rowid, s.nom as name, s.barcode, s.town, s.datec, s.code_client, s.code_fournisseur, ";
|
||||
$sql.= " st.libelle as stcomm, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status,";
|
||||
$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4";
|
||||
$sql.= ",s.fk_pays";
|
||||
$sql.= ",typent.code as typent_code";
|
||||
$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4,";
|
||||
$sql.= " s.fk_pays, s.tms as date_update, s.datec as date_creation,";
|
||||
$sql.= " typent.code as typent_code";
|
||||
// We'll need these fields in order to filter by sale (including the case where the user can only see his prospects)
|
||||
if ($search_sale) $sql .= ", sc.fk_soc, sc.fk_user";
|
||||
// We'll need these fields in order to filter by categ
|
||||
@ -345,10 +345,29 @@ if ($resql)
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
// Define list of fields to show into list
|
||||
$arrayfields=array(
|
||||
's.nom'=>array('label'=>$langs->trans("Company"), 'checked'=>1),
|
||||
's.barcode'=>array('label'=>$langs->trans("BarCode"), 'checked'=>1, 'cond'=>(! empty($conf->barcode->enabled))),
|
||||
's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1),
|
||||
'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>1),
|
||||
'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>1),
|
||||
's.siren'=>array('label'=>$langs->trans("ProfId1Short"), 'checked'=>1),
|
||||
's.siret'=>array('label'=>$langs->trans("ProfId2Short"), 'checked'=>1),
|
||||
's.ape'=>array('label'=>$langs->trans("ProfId3Short"), 'checked'=>1),
|
||||
's.idprof4'=>array('label'=>$langs->trans("ProfId4Short"), 'checked'=>1),
|
||||
's.status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>200),
|
||||
's.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
|
||||
's.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
|
||||
);
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
|
||||
{
|
||||
$selectotherfields=$form->multiSelectArrayWithCheckbox('selectotherfields', $arrayfields);
|
||||
}
|
||||
|
||||
print '<table class="liste '.($moreforfilter?"listwithfilterbefore":"").'">';
|
||||
|
||||
// Lines of titles
|
||||
print '<tr class="liste_titre">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
|
||||
if (! empty($conf->barcode->enabled)) print_liste_field_titre($langs->trans("BarCode"), $_SERVER["PHP_SELF"], "s.barcode",$param,'','',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"s.town","",$param,'',$sortfield,$sortorder);
|
||||
@ -363,7 +382,7 @@ if ($resql)
|
||||
$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"s.status","",$param,'align="right"',$sortfield,$sortorder);
|
||||
print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch ');
|
||||
print_liste_field_titre($selectotherfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
|
||||
print "</tr>\n";
|
||||
|
||||
// Fields title search
|
||||
@ -372,18 +391,19 @@ if ($resql)
|
||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||
if (! empty($search_nom_only) && empty($search_nom)) $search_nom=$search_nom_only;
|
||||
print '<input class="flat" type="text" name="search_nom" size="8" value="'.htmlspecialchars($search_nom).'">';
|
||||
|
||||
print '<input class="flat" type="text" name="search_nom" size="8" value="'.dol_escape_htmltag($search_nom).'">';
|
||||
print '</td>';
|
||||
// Barcode
|
||||
if (! empty($conf->barcode->enabled))
|
||||
{
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" type="text" name="sbarcode" size="6" value="'.htmlspecialchars($sbarcode).'">';
|
||||
print '<input class="flat" type="text" name="sbarcode" size="6" value="'.dol_escape_htmltag($sbarcode).'">';
|
||||
print '</td>';
|
||||
}
|
||||
// Town
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" size="8" type="text" name="search_town" value="'.htmlspecialchars($search_town).'">';
|
||||
print '<input class="flat" size="8" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
|
||||
print '</td>';
|
||||
//Country
|
||||
print '<td class="liste_titre" align="center">';
|
||||
@ -395,19 +415,19 @@ if ($resql)
|
||||
print '</td>';
|
||||
// IdProf1
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof1" value="'.htmlspecialchars($search_idprof1).'">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof1" value="'.dol_escape_htmltag($search_idprof1).'">';
|
||||
print '</td>';
|
||||
// IdProf2
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof2" value="'.htmlspecialchars($search_idprof2).'">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof2" value="'.dol_escape_htmltag($search_idprof2).'">';
|
||||
print '</td>';
|
||||
// IdProf3
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof3" value="'.htmlspecialchars($search_idprof3).'">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof3" value="'.dol_escape_htmltag($search_idprof3).'">';
|
||||
print '</td>';
|
||||
// IdProf4
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof4" value="'.htmlspecialchars($search_idprof4).'">';
|
||||
print '<input class="flat" size="4" type="text" name="search_idprof4" value="'.dol_escape_htmltag($search_idprof4).'">';
|
||||
print '</td>';
|
||||
// Type (customer/prospect/supplier)
|
||||
print '<td class="liste_titre" align="middle">';
|
||||
|
||||
BIN
htdocs/theme/eldy/img/list.png
Normal file
BIN
htdocs/theme/eldy/img/list.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 83 B |
@ -3487,6 +3487,61 @@ a span.select2-chosen
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================================== */
|
||||
/* Multiselect with checkbox */
|
||||
/* ============================================================================== */
|
||||
|
||||
dl.dropdown {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
.dropdown dd, .dropdown dt {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
.dropdown ul {
|
||||
margin: -1px 0 0 0;
|
||||
text-align: left;
|
||||
}
|
||||
.dropdown dd {
|
||||
position:relative;
|
||||
}
|
||||
.dropdown dt a {
|
||||
display:block;
|
||||
overflow: hidden;
|
||||
border:0;
|
||||
}
|
||||
.dropdown dt a span, .multiSel span {
|
||||
cursor:pointer;
|
||||
display:inline-block;
|
||||
padding: 0 3px 2px 0;
|
||||
}
|
||||
.dropdown dd ul {
|
||||
background-color: #FFF;
|
||||
border: 1px solid #888;
|
||||
display:none;
|
||||
right:0px; /* pop is align on right */
|
||||
padding: 2px 15px 2px 5px;
|
||||
position:absolute;
|
||||
top:2px;
|
||||
list-style:none;
|
||||
max-height: 200px;
|
||||
overflow: auto;
|
||||
}
|
||||
.dropdown span.value {
|
||||
display:none;
|
||||
}
|
||||
.dropdown dd ul li {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.dropdown dd ul li a {
|
||||
padding:5px;
|
||||
display:block;
|
||||
}
|
||||
.dropdown dd ul li a:hover {
|
||||
background-color:#fff;
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================================== */
|
||||
/* JMobile */
|
||||
|
||||
BIN
htdocs/theme/md/img/list.png
Normal file
BIN
htdocs/theme/md/img/list.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 83 B |
Loading…
Reference in New Issue
Block a user