Fork me on GitHub






MRBS : caractères accentués
Semi pro
Inscrit: 27/10/2004 11:10
Messages: 566
Bonjour et bonnes fêtes à tous comme le suggère la page d'accueil de notre site préféré

Je teste ce module sur un site avec une version 2.4.2 de Xoops
l'ensemble est configuré en utf-8, or l'affichage des mois avec un caractère accentué ( exemple déc.) affiche le fameux "?" dans un losange noir , et je cherche désespérément le fichier d'où proviennent les mois en français pour le faire passer en utf-8
bon je vous laisse, car mon écran commence à être recouvert de neige

Posté le : 20/12/2009 11:55

J'aime les sirènes ...
j'aime pas les arrêtes dans le poisson !...
Partager Twitter Partagez cette article sur GG+
Re: MRBS : caractères accentués
Supporter Xoops
Inscrit: 09/01/2005 13:37
De Breizh
Messages: 16972
bonjour,

ce module n'aurait pas un javascript quelque part ?

@+

Posté le : 20/12/2009 12:28

La connaissance s'accroît quand on la partage ...
Partager Twitter Partagez cette article sur GG+
Re: MRBS : caractères accentués
Semi pro
Inscrit: 27/10/2004 11:10
Messages: 566
Bonjour kris

j'avais déjà cherché dans cette direction, mais sans succès, il y a un seul fichier js, je pose le code ici au cas où :

/*
 * Cross-Browser Library of JavaScript Functions
 *
 * Inspired by the excellent xbDOM.js (and using it for debugging)
 *
 * $Id: xbLib.js 990 2008-12-21 22:22:07Z cimorrison $
 */

var doAlert false;
var 
xbDump = function(stringtag) {return;} // If indeed not defined, define as a dummy routine.

// var xbDump = function(string, tag) {alert(string);} // If indeed not defined, define as a dummy routine.

if (doAlert)
{
  
alert("Started xbLib.js v4");
}
xbDump("Started xbLib.js v4");

/*****************************************************************************
* Part 1: Generic Cross-Browser Library routines                             *
*****************************************************************************/

// Browser-independent background color management
function xblGetNodeBgColor(node)
{
  if (!
node)
  {
    return 
null;
  }

  
// Have to use currentStyle or ComputedStyle here because node.style will just give you
  // what's in the style attribute (ie <td style="xxx">), rather than what the actual style 
  // is computed from the cascade.    As there is no style attribute this does not work (ie 
  // will return null).    Although xblSetNodeBgColor() will cope with null values, we will
  // try and avoid them in the first place. 
  
  
if (node.currentStyle)         // The IE way
  
{
        return 
node.currentStyle.backgroundColor;
  }
  if (
window.getComputedStyle)   // All other browsers
  
{
    var 
compStyle document.defaultView.getComputedStyle(node"");
    return 
compStyle.getPropertyValue("background-color");
  }
  
// Else this browser is not DOM compliant. Try getting a classic attribute.
  
return node.bgColor;
}

function 
xblSetNodeBgColor(nodecolor)
{
  if (!
node)
  {
    return;
  }
  if (
node.style)
  {
    if (
node.style.setProperty// If DOM level 2 supported, the NS 6 way
    
{
      if (
color)
      {
        
node.style.setProperty("background-color"color"");
      }
      else
      
// Need to cater for the case when color is null.    Although most browsers will do what you might expect
      // when you use setProperty or setAttribute with null, there are some, eg Konqueror, that don't.
      
{
        
node.style.removeProperty("background-color");
      }
      return;
    }
    if (
node.style.setAttribute// If DOM level 2 supported, the IE 6 way
    
{
      if (
color)
      {
        
node.style.setAttribute("backgroundColor"color);
      }
      else      
// see comment above
      
{
        
node.style.removeAttribute("backgroundColor");
      }
      return;
    }
    
// Else this browser has very limited DOM support. Try setting the attribute directly.
    
node.style.backgroundColor color// Works on Opera 6
    
return;
  }
  
// Else this browser is not DOM compliant. Try setting a classic attribute.
  
node.bgColor color;
}

// Browser-independant node tree traversal
function xblChildNodes(node)
{
  if (!
node)
  {
    return 
null;
  }
  if (
node.childNodes)
  {
    return 
node.childNodes// DOM-compliant browsers
  
}
  if (
node.children)
  {
    return 
node.children// Pre-DOM browsers like Opera 6
  
}
  return 
null;
}

function 
xblFirstSibling(node)
{
  if (!
node)
  {
    return 
null;
  }
  var 
siblings xblChildNodes(node.parentNode);
  if (!
siblings)
  {
    return 
null;
  }
  return 
siblings[0];
}

function 
xblLastSibling(node)
{
  if (!
node)
  {
    return 
null;
  }
  var 
siblings xblChildNodes(node.parentNode);
  if (!
siblings)
  {
    return 
null;
  }
  return 
siblings[siblings.length 1];
}

var 
xbGetElementById;
if (
document.getElementById// DOM level 2
{
  
xblGetElementById = function(id) { return document.getElementById(id); };
}
else if (
document.layers// NS 4
{
  
xblGetElementById = function(id) { return document.layers[id]; };
}
else if (
document.all// IE 4
{
  
xblGetElementById = function(id) { return document.all[id]; };
}
else
{
  
xblGetElementById = function(id) { return null; };
}

// Browser-independant style sheet rules scan.
function xbForEachCssRule(callbackref)
{
  if (
document.styleSheets) for (var i=0i<document.styleSheets.lengthi++) 
  {
    var 
sheet document.styleSheets.item(i);
    
// xbDump("Style sheet " + i, "h3"); 
    // xbDumpProps(sheet);
    // If the browser is kind enough for having already split the CSS rules as specified by DOM... (NS6)
    
if (sheet.cssRules) for (var j=0j<sheet.cssRules.lengthj++)
    {
      var 
rule sheet.cssRules.item(j);
      
// xbDump("Rule " + j, "h4");
      // xbDumpProps(rule);
      
var result callback(ruleref);
      if (
result)
      {
        return 
result;
      }
    }
    else if (
sheet.cssText// Else pass it the whole set at once (IE6)
    
{
      
// TO DO EVENTUALLY: Split the list into individual rules!
      
var result callback(sheetref);
      if (
result)
      {
        return 
result;
      }
    }
  }
  return 
false;
}

/*---------------------------------------------------------------------------*
*                                                                             *
|   Function:       ForEachChild                                              |
|                                                                             |
|   Description:    Apply a method to each child node of an object.           |
|                                                                             |
|   Parameters:     Object obj          The object. Typically a DOM node.     |
|                   Function callback   Callback function.                    |
|                   Object ref          Reference object.                     |
|                                                                             |
|   Returns:        The first non-null result reported by the callback.       |
|                                                                             |
|   Support:        NS4           No. Returns null.                           |
|                   IE5+, NS6+    Yes.                                        |
|                   Opera 6       Yes.                                        |
|                                                                             |
|   Notes:          The callback prototype is:                                |
|                   int callback(obj, ref);                                   |
|                   If the callback returns !null, the loop stops.            |
|                                                                             |
|   History:                                                                  |
|                                                                             |
|    2002/03/04 JFL Initial implementation.                                   |
|    2002/03/25 JFL Simplified the implementation.                            |
*                                                                             *
*---------------------------------------------------------------------------*/

function ForEachChild(objcallbackref)
{
  if (!
obj)
  {
    return 
null;
  }
  
  var 
children null;
  if (
obj.childNodes)           // DOM-compliant browsers
  
{
    
children obj.childNodes;
  }
  else if (
obj.children)        // Pre-DOM browsers like Opera 6
  
{
    
children obj.children;
  }
  else
  {
    return 
null;
  }
    
  var 
nChildren children.length;
  for (var 
i=0i<nChildreni++) 
  {
    var 
result callback(children[i], ref);
    if (
result)
    {
      return 
result;
    }
  }
  return 
null;
}

/*---------------------------------------------------------------------------*
*                                                                             *
|   Function:       ForEachDescendant                                         |
|                                                                             |
|   Description:    Apply a method to each descendant node of an object.      |
|                                                                             |
|   Parameters:     Object obj          The object. Typically a DOM node.     |
|                   Function callback   Callback function.                    |
|                   Object ref          Reference object.                     |
|                                                                             |
|   Returns:        The first non-null result reported by the callback.       |
|                                                                             |
|   Support:        NS4           No. Returns null.                           |
|                   IE5+, NS6+    Yes.                                        |
|                   Opera 6       Yes.                                        |
|                                                                             |
|   Notes:          The callback prototype is:                                |
|                   int callback(obj, ref);                                   |
|                   If the callback returns !null, the loop stops.            |
|                                                                             |
|   History:                                                                  |
|                                                                             |
|    2002/10/29 JFL Initial implementation.                                   |
*                                                                             *
*---------------------------------------------------------------------------*/

function ForEachDescendantCB(objref)
{
  var 
result ref.cb(objref.rf);
  if (
result)
  {
    return 
result;
  }
  return 
ForEachChild(objForEachDescendantCBref);
}

function 
ForEachDescendant(objcallbackref)
{
  if (!
obj)
  {
    return 
null;
  }
  var 
ref1 = {cb:callbackrf:ref};
  var 
result ForEachChild(objForEachDescendantCBref1);
  
delete ref1;
  return 
result;
}

/*****************************************************************************
*            Part 2: MRBS-specific Active Cell Management routines            *
*****************************************************************************/

// Define global variables that control the behaviour of the Active Cells.
// Set conservative defaults, to get the "classic" behaviour if JavaScript is half broken.

var useJS false// If true, use JavaScript for cell user interface. If null, use a plain Anchor link.
var highlight_left_column false;
var 
highlight_right_column false;
var 
highlightColor "#ffc0da"// Default highlight color, if we don't find the one in the CSS.
var statusBarMsg "Click on the cell to make a reservation."// Message to write on the status bar when activating a cell.

// Duplicate at JavaScript level the relevant PHP configuration variables.
var show_plus_link true;
var 
highlight_method "hybrid";

var 
GetNodeColorClass = function(node)
{
  return 
node.className;
}
var 
SetNodeColorClass = function(nodecolorClass

  
node.className colorClass;  // Use the td.highlight color from mrbs.css.php.
}

// Helper routines for searching text in the td.highlight CSS class.
function SearchTdHighlightText(ruleTextref// Callback called by the CSS scan routine
{
  
xbDump("SearchTdHighlightText() called back");
  if (!
ruleText)
  {
    return 
null;
  }
  
ruleText ruleText.toLowerCase(); // Make sure search is using a known case.
  
var ruleText.indexOf("td.highlight");
  if (
== -1)
  {
    return 
null// td.highlight not found in this rule.
  
}
  
ruleText.indexOf("background-color:"k) + 17;
  if (
== 16)
  {
    return 
null// td.highlight background-color not defined.
  
}
  while (
ruleText.charAt(k) <= ' ')
  {
    
+= 1// Strip blanks before the color value.
  
}
  var 
ruleText.length;
  var 
ruleText.indexOf(";"k); // Search the separator with the next attribute.
  
if (== -1)
  {
    
l;
  }
  var 
ruleText.indexOf("}"k); // Search the end of the rule.
  
if (== -1)
  {
    
l;
  }
  if (
n)
  {
    
m// n = index of the first of the above two.
  
}
  while (
ruleText.charAt(n-1) <= ' ')
  {
    
-= 1// Strip blanks after the color value
  
}
  var 
color ruleText.substr(kn-k);
  
xbDump("SearchTdHighlightText() found color = " color);
  return 
color;
}

function 
isAlphaNum(c)
{
  return (
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(c) >= 0);
}

// Callback called by the CSS scan routine
function SearchTdHighlight(ruleref)
{
  if (!
rule)
  {
    return 
null;
  }
  if (
rule.selectorText// DOM. NS6, Konqueror.
  
{
    var 
selector rule.selectorText.toLowerCase();
    var 
selector.indexOf("td.highlight");
    if (
== -1)
    {
      return 
null;
    }
    if (
0)
    {
      return 
null;
    }
    
// var c = selector.charAt(i+12);
    // if ((!c) || isAlphaNum(c)) return null;
    
if (!rule.style)
    {
      return 
null;
    }
    
    if (
rule.style.getPropertyValue// If DOM level 2 supported, the NS 6 way
    
{
      return 
rule.style.getPropertyValue("background-color");
    }
    if (
rule.style.getAttribute// If DOM level 2 supported, the IE 6 way
    
{
      return 
rule.style.getAttribute("backgroundColor");
    }
    return 
rule.style.backgroundColor// Else DOM support is very limited.
  
}
  
  if (
rule.cssText// Alternative for IE6
  
{
    return 
SearchTdHighlightText(rule.cssText);
  }
  return 
null;
}

/*---------------------------------------------------------------------------*
*                                                                             *
|   Function:       InitActiveCell                                            |
|                                                                             |
|   Description:    Initialize the active cell management.                    |
|                                                                             |
|   Parameters:     Boolean show        Whether to show the (+) link.         |
|                   Boolean left        Whether to highlight the left column. |
|                   Boolean right       Whether to highlight the right column.|
|                   String method       One of "bgcolor", "class", "hybrid".  |
|                   String message      The message to put on the status bar. |
|                                                                             |
|   Returns:        Nothing.                                                  |
|                                                                             |
|   Support:        NS4           No. Returns null.                           |
|                   IE5+, NS6+    Yes.                                        |
|                   Opera 6       Yes.                                        |
|                                                                             |
|   Notes:          This code implements 3 methods for highlighting cells:    |
|                   highlight_method="bgcolor"                                |
|                       Dynamically changes the cell background color.        |
|                       Advantage: Works with most javascript-capable browsers.
|                       Drawback: The color is hardwired in this module.(grey)|
|                   highlight_method="class"                                  |
|                       Highlights active cells by changing their color class.|
|                       The highlight color is the background-color defined   |
|                        in class td.highlight in the CSS.                    |
|                       Advantage: The class definition in the CSS can set    |
|                        anything, not just the color.                        |
|                       Drawback: Slooow on Internet Explorer 6 on slow PCs.  |
|                   highlight_method="hybrid"                                 |
|                       Extracts the color from the CSS DOM if possible, and  |
|                        uses it it like in the bgcolor method.               |
|                       Advantage: Fast on all machines; color defined in CSS.|
|                       Drawback: Not as powerful as the class method.        |
|                                                                             |
|   History:                                                                  |
|                                                                             |
|    2004/03/01 JFL Initial implementation.                                   |
*                                                                             *
*---------------------------------------------------------------------------*/

function InitActiveCell(showleftrightmethodmessage)
{
  
show_plus_link show;
  
highlight_method method;
  
highlight_left_column left;
  
highlight_right_column right;
  
statusBarMsg message;

  
xbDump("show_plus_link = " show_plus_link);
  
xbDump("highlight_method = " highlight_method);
  
xbDump("highlight_left_column = " highlight_left_column);
  
xbDump("highlight_right_column = " highlight_right_column);
  
xbDump("statusBarMsg = " statusBarMsg);
  
  
// Check to see whether we are using IE6 or below.    This is done by checking the
  // href string of the stylesheets that have been loaded (see style.inc for the titles).
  //
  // If we are using IE6 or below then the :hover pseudo-class
  // is not supported for elements other than <a> and we will have to use JavaScript highlighting
  // instead of CSS highlighting.    If we can't even read the href string, then it's a good bet that 
  // the :hover pseudo-class isn't supported either.
  
var use_css_highlighting true;
  if (
document.styleSheets)
  {
    var 
nStyleSheets document.styleSheets.length;
    for (var 
i=0nStyleSheetsi++)
    {
      
// check to see if the stylesheet is an 'ielte6' sheet;
      // if it is, then we can't use CSS highlighting
      
if (document.styleSheets[i].href != null)  // will be null in the case of an embedded style sheet
      
{
        if (
document.styleSheets[i].href.search(/ielte6/i) != -1)
        {
          
use_css_highlighting false;
          break;
        }
      }
    }
  }
  else
  {
    
use_css_highlighting false;
  }
  
  
// If we are to use CSS highlighting then redefine the begin/end active cell functions as empty 
  // functions, because we don't need them.
  
if (use_css_highlighting)
  {
    
BeginActiveCell = function() {};
    
EndActiveCell   = function() {};
    return;
  }

  
// Javascript feature detection: Check if a click handler can be called by the browser for a table.
  // For example Netscape 4 only supports onClick for forms.
  // For that, create a hidden table, and check if it has an onClick handler.
  // document.write("<table id="test_table" onClick="return true" border=0 style="display:none"><tr><td id="test_td" class="highlight">&nbsp;</td></tr></table>n");
  // Note: The previous line, also technically correct, silently breaks JavaScript on Netscape 4.
  //       (The processing of this file completes successfully, but the next script is not processed.)
  //       The next line, with the bare minimum content for our purpose, works on all browsers I've tested, included NS4.
  
document.write("<table id="test_table" onClick="return true" border=0></table>n");
  var 
test_table xblGetElementById("test_table"); // Use this test table to detect the browser capabilities.
  
if (test_table && test_table.onclick)
  {
    
useJS true// If the browser supports click event handlers on tables, then use JavaScript.
  
}

  
xbDump("JavaScript feature detection: Table onClick supported = " useJS);

  
//----------------------------------------------------//

  // Javascript feature detection: Check if the browser supports dynamically setting style properties.
  
var useCssClass = ((highlight_method=="class") && test_table && test_table.style
                     
&& (test_table.style.setProperty || test_table.style.setAttribute) && true);
  if (
useCssClass)
  {
    
// DOM-compliant browsers
    
GetNodeColorClass = function(node) { return node.className; }
  }
  else
  {
    
// Pre-DOM browsers like Opera 6
    
GetNodeColorClass = function(node) { return xblGetNodeBgColor(node); } // Can't get class, so get color.
  
}

  
xbDump("JavaScript feature detection: Table class setting supported = " useCssClass);

  
//----------------------------------------------------//

  // Now search in the CSS objects the background color of the td.highlight class.
  // This is done as a performance optimization for IE6: Only change the td background color, but not its class.
  
highlightColor null;
  if (
highlight_method!="bgcolor")
  {
    
highlightColor xbForEachCssRule(SearchTdHighlight0);
  }
  if (!
highlightColor)
  {
    
highlightColor "#ffc0da"// Set default for DOM-challenged browsers
    
xbDump("Using defaut highlight color = " highlightColor);
  }
  else
  {
    
xbDump("Found CSS highlight color = " highlightColor);
  }

  
//----------------------------------------------------//

  // Finally combine the last 2 results to generate the SetNodeColorClass function.
  
if (useCssClass)
  {
    
// DOM-compliant browsers
    
SetNodeColorClass = function(nodecolorClass
      { 
        
xbDump("SetNodeColorClass(" colorClass ")");
        
node.className colorClass;  // Use the td.highlight color from mrbs.css.php.
      
}
  }
  else
  {
    
// Pre-DOM browsers like Opera 6
    
SetNodeColorClass = function(nodecolorClass
      {
        
xbDump("SetNodeColorClass(" colorClass ")");
        if (
colorClass == "highlight")
        {
          
colorClass highlightColor// Cannot use the CSS color class. Use the color computed above.
        
}
        
xblSetNodeBgColor(nodecolorClass);
      }
  }
}

//----------------------------------------------------//

// Cell activation
function HighlightNode(node// Change one td cell color class
{
  
node.oldColorClass GetNodeColorClass(node);
  
SetNodeColorClass(node"highlight");
}

// Activate the td cell under the mouse, and optionally the corresponding
// hour cells on both sides of the table.
function ActivateCell(cell)
{
  if (
cell.isActive)
  {
    return; 
// Prevent problems with reentrancy. (It happens on slow systems)
  
}
  
cell.isActive true;
  if (
statusBarMsg)
  {
    
window.status statusBarMsg// Write into the status bar.
  
}
  
// First find the enclosing table data cell.
  
for (var tdCell=cell.parentNodetdCelltdCell=tdCell.parentNode)
  {
    if (
tdCell.tagName == "TD")
    {
      break;
    }
  }
  if (!
tdCell)
  {
    return;
  }
  
HighlightNode(tdCell);
  if (
highlight_left_column)
  {
    
// Locate the head node for the current row.
    
var leftMostCell xblFirstSibling(tdCell);
    if (
leftMostCell)
    {
      
HighlightNode(leftMostCell);
    }
  }
  if (
highlight_right_column)
  {
    
// Locate the last node for the current row. (Only when configured to display times at right too.)
    
var rightMostCell xblLastSibling(tdCell);
    
// Now work around a Netscape peculiarity: The #text object is a sibling and not a child of the TD!
    
while (rightMostCell && (rightMostCell.tagName != "TD"))
    {
      
rightMostCell rightMostCell.previousSibling;
    }
    if (
rightMostCellHighlightNode(rightMostCell);
  }
}

// Cell unactivation
function UnactivateCell(cell)
{
  if (!
cell.isActive)
  {
    return; 
// Prevent problems with reentrancy.
  
}
  
cell.isActive null;
  
window.status ""// Clear the status bar.
  // First find the enclosing table data cell.
  
for (var tdCell=cell.parentNodetdCelltdCell=tdCell.parentNode)
  {
    if (
tdCell.tagName == "TD")
    {
      break;
    }
  }
  if (!
tdCell)
  {
    return;
  }
  
SetNodeColorClass(tdCelltdCell.oldColorClass);
  if (
highlight_left_column)
  {
    
// Locate the head node for the current row.
    
var leftMostCellxblFirstSibling(tdCell);
    if (
leftMostCell)
    {
      
SetNodeColorClass(leftMostCellleftMostCell.oldColorClass);
    }
  }
  if (
highlight_right_column)
  {
    
// Locate the last node for the current row. (Only when configured to display times at right too.)
    
var rightMostCell xblLastSibling(tdCell);
    
// Now work around a NetScape peculiarity: The #text object is a sibling and not a child of the TD!
    
while (rightMostCell && (rightMostCell.tagName != "TD"))
    {
      
rightMostCell rightMostCell.previousSibling;
    }
    if (
rightMostCell)
    {
      
SetNodeColorClass(rightMostCellrightMostCell.oldColorClass);
    }
  }
}

xbDump("Cell activation routines defined.");

//----------------------------------------------------//

// Cell click handling

// Callback used to find the A link inside the cell clicked.
function GotoLinkCB(noderef)
{
  var 
tag null;
  if (
node.tagName)
  {
    
tag node.tagName// DOM-compliant tag name.
  
}
  else if (
node.nodeName)
  {
    
tag node.nodeName// Implicit nodes, such as #text.
  
}
  if (
tag && (tag.toUpperCase() == "A"))
  {
    return 
node;
  }
  return 
null;
}

// Handler for going to the period reservation edition page.
function GotoLink(node)
{
  
xbDump("GotoLink()");
  
link ForEachDescendant(nodeGotoLinkCBnull);
  if (
link)
  {
    
window.location link.href;
  }
}

xbDump("Cell click handlers defined.");

//----------------------------------------------------//

// Cell content generation

function BeginActiveCell()
{
  if (
useJS)
  {
    
document.write("<table class="naked" width="100%" cellSpacing="0" onMouseOver="ActivateCell(this)" onMouseOut="UnactivateCell(this)" onClick="GotoLink(this)">n<td class="naked" style="border0px">n");
    
// Note: The &nbsp; below is necessary to fill-up the cell. Empty cells behave badly in some browsers.
    
if (!show_plus_link)
    {
      
document.write("&nbsp;<div style="display:none">n"); // This will hide the (+) link.
    
}
  }
}

function 
EndActiveCell()
{
  if (
useJS)
  {
    if (!
show_plus_link)
    {
      
document.write("</div>");
    }
    
document.write("</td></table>n");
  }
}

xbDump("Cell content generation routines defined.");

//----------------------------------------------------//

if (doAlert)
{
  
alert("Ended xbLib.js");
}
xbDump("Ended xbLib.js.php");


Je n'y vois rien en rapport avec calendar
@+

Posté le : 20/12/2009 14:35

J'aime les sirènes ...
j'aime pas les arrêtes dans le poisson !...
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

18 Personne(s) en ligne (16 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 18 | Plus ...