Affichage :
Le laboratoire de Darathor Index du Forum

Le laboratoire de Darathor

Ressources diverses, principalement sur les fourms phpBB
[Sous-MOD] Fonctions utiles (DEV - B)

Ce forum est verrouillé, vous ne pouvez pas poster, ni répondre, ni éditer les sujets. Ce sujet est verrouillé, vous ne pouvez pas éditer les messages ou faire de réponses.

Rechercher dans ce sujet :
Messages
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 07 Oct 2006 14:17
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Citation :
But : Ce Sous-MOD propose quelques fonctions de base utilisées par un certain nombre de MODs.

Auteur : Darathor (darathor@free.fr)
Version : DEV - C (07/10/2006)
Compatibilité phpBB : 2.0.21


Dans "includes/functions.php" :
Code :
#
# Trouver
#
?>

#
# Ajouter avant
#
// DEBUT MOD Fonctions utiles
/**
 * Teste si la valeur n'a pas déjà le nombre d'occurences maximal dans la base.
 *
 * @param $table nom de la table concernée.
 * @param $collumn nom de la colonne concernée.
 * @param $value valeur à tester.
 * @param $max_occurences nombre maximum d'occurences autorisé (facultatif. Vaut 1 par défaut).
 * @param $current_line variable facultative (vide par défaut) permettant d'indiquer une ligne à ignorer dans les tests (doit se présenter sous la forme "champ != valeur").
 * @return TRUE si le nombre maximal d'occurences est déjà atteint, FALSE sinon.
 */
function FoUt_value_occurences_exceded($table, $collumn, $value, $max_occurences, $current_line = '')
{
   global $lang, $board_config, $db;

   $sql = "SELECT COUNT(*) AS occurences FROM $table
      WHERE $collumn = '$value' ";
   if($current_line != '') { $sql .= " AND $current_line "; }
   $sql .= " GROUP BY $collumn";

   if(!$result = $db->sql_query($sql))
   {
      message_die(GENERAL_ERROR, "Couldn't obtain data", "", __LINE__, __FILE__, $sql);
   }

   if(($row = $db->sql_fetchrow($result)) && ($row['occurences'] >= $max_occurences))
   {
      return TRUE;
   }
   else { return FALSE; }
}

/**
 * Envoie une demande de confirmation (Attention cette fonction ne fait qu'intégrer le "body" de la page, elle n'inclut pas le header, le footer et le pparse).
 * La page destination reçoit un formulaire une variable "confirm" définie en cas de confirmation et une variable "cancel" en cas de reffus (plusles champs cachés).
 *
 * @param $message_text message explicatif sur la question à confirmer.
 * @param $destination URL où envoyer le formulaire (attribut <em>action</em> de la balise <em>form</em>).
 * @param $hidden_fields chaîne de caractère contenant les champs cachés à transmettre.
 */
function FoUt_get_confirmation($message_text, $destination, $hidden_fields)
{
   global $lang, $template;

   $template->set_filenames(array(
      'body' => 'confirm_body.tpl')
   );

   $template->assign_vars(array(
      'MESSAGE_TITLE' => $lang['Confirm'],
      'MESSAGE_TEXT' => $message_text,

      'L_YES' => $lang['Yes'],
      'L_NO' => $lang['No'],

      'S_CONFIRM_ACTION' => $destination,
      'S_HIDDEN_FIELDS' => $hidden_fields)
   );
}

/**
 * Récupère dans la base de données les élément du'une table répondant à la condition $where (si $where = '', tous les éléments sont selectionnés).
 *
 * @param $table table dans laquelle chercher les éléments.
 * @param $where contenu de la clause WHERE de la requête (si chaine vide, pas de clause WHERE).
 * @param $order_fields champ(s) selon lesquels ordonner les résultats, séparés par des virgules s'il y en a plusieurs.
 * @return tableau résultant de la requête SQL.
 */
function FoUt_get_element_list($table, $where, $order_fields)
{
   global $lang, $board_config, $phpbb_root_path, $phpEx, $db;

   $sql = "SELECT * FROM $table ";
   if(trim($where) != '') { $sql .= " WHERE $where "; }
   if(trim($order_fields) != '') $sql .= " ORDER BY $order_fields ";

   if( !$result = $db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, "Couldn't obtain $table data", "", __LINE__, __FILE__, $sql);
   }
   $rows = $db->sql_fetchrowset($result);

   return $rows;
}

/**
 * Calcule le nombre d'éléments du'une table répondant à la condition $where (si $where = '', tous les éléments sont selectionnés).
 *
 * @param $table table dans laquelle chercher les éléments.
 * @param $where contenu de la clause WHERE de la requête (si chaine vide, pas de clause WHERE).
 * @return tableau résultant de la requête SQL.
 */
function FoUt_get_element_quantity($table, $where)
{
   global $lang, $board_config, $phpbb_root_path, $phpEx, $db;

   $sql = "SELECT COUNT(*) AS nb FROM $table ";
   if($where != '') { $sql .= " WHERE $where "; }

   if( !$result = $db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, "Couldn't obtain $table data", "", __LINE__, __FILE__, $sql);
   }
   $row = $db->sql_fetchrow($result);

   return $row['nb'];
}

/**
 * Génère un menu déroulant contenant tous les élément du tableau passé en argument.
 *
 * @param $element_rows tableau des éléments à lister dans le menu déroulant (récupérée par FoUt_get_element_list()).
 * @param $field_name nom attribut name de la balise select.
 * @param $value_key clé du tableau $file_list[$i] contenant la valeur à donner à l'argument value des balises option (ex : 'id').
 * @param $content_key clé du tableau $file_list[$i] contenant le texte à mettre entre les balises option (ex : 'name').
 * @return
 */
function FoUt_get_element_select($element_rows, $field_name, $value_key, $content_key)
{
   // Initialisation de la liste des groupes disponibles pour l'ajout d'un membres.
   $select .= '<select class="gensmall" name="' . $field_name . '"><option value="0" selected="selcted">Aucun</option>';

   // Parcours des fichiers.
   foreach($element_rows as $entry)
   {
      $select .= '<option value="' . $entry[$value_key] . '">' . $entry[$content_key] . '</option>';
   }

   // Fermeture du menu déroulant.
   $select .= '</select>';

   return $select;
}

/**
 * Met à jour une valeur de la table config.
 *
 * @param $config_name nom de l'entrée.
 * @param $config_value valeur à donner à de l'entrée.
 * @param $insert_if_null paramètre facultatif (FALSE par défaut), disant s'il faut insérer l'entrée dans la table si sa précédente valeur est vide (n'utiliser cette option que si cette entrée ne peut être vide !).
 */
function FoUt_set_config_value($config_name, $config_value, $insert_if_null = FALSE)
{
   global $lang, $board_config, $phpbb_root_path, $phpEx, $db;

   // On n'effectue cette opération que si la valeur n'est pas déjà la bonne.
   if($board_config[$config_name] != $config_value)
   {
      $sql = CONFIG_TABLE . "
         SET config_name = '$config_name', config_value = '$config_value'";

      // Si l'on n'a pas de valeur, on crée l'entrée.
      if($board_config[$config_name] == '' && $insert_if_null)
      {
         $sql = "INSERT INTO " . $sql;
      }
      // Sinon, elle existe et on la met à jour.
      else
      {
         $sql = "UPDATE " . $sql . "
            WHERE config_name = '$config_name'";
      }

      if(!$result = $db->sql_query($sql))
      {
         message_die(GENERAL_ERROR, "Couldn't update/insert into config table", "", __LINE__, __FILE__, $sql);
      }

      // Mise à jour de la variable également pour le cas où elle serait réutilisée dans la même page.
      $board_config[$config_name] = $config_value;
   }
}

/**
 * Récupère une liste d'ids passé en argument et génère la clause where pour ne prendre que parmi ces ids (de la forume : " field IN (id1, id2, ... idn) ").
 *
 * @param $ids tableau contenant les ids.
 * @param $field champ correspondant aux ids.
 * @param $add_where si positionné à TRUE, on préfixe la requête par " WHERE ".
 * @param $error_message chaine de carractère contenant le message d'erreur à renvoyer si $ids est vide ou n'est pas un tableau. Si ce paramètre est omis, aucun message d'erreur n'est renvoyé.
 * @return la clause sous la forme : " [WHERE] field IN (id1, id2, ... idn) " ou une chaine vide s'il n'y a pas d'ids.
 */
function FuUt_get_where_id_in($ids, $field, $add_where, $error_message = '')
{
   if(is_array($ids) && (count($ids) > 0))
   {
      // Triatement de la liste des ids.
      $sql_ids = '';
      foreach($ids as $id) { $sql_ids .= (($sql_ids != '') ? ', ' : '') . $id; }

      // Completion de la clause.
      if($add_where) { $sql = ' WHERE '; }
      else { $sql = ' '; }
      $sql .= $field . ' IN (' . $sql_ids . ') ';
      return $sql;
   }
   elseif($error_message != '') { message_die(GENERAL_MESSAGE, $error_message); }
   else { return ''; }
}
// FIN MOD Fonctions utiles

Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
  Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum