[ Index ]
 

Code source de Phorum 5.1.25

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/mods/smileys/ -> smileyslib.php (source)

   1  <?php
   2  
   3  // A library of common functions and definitions for
   4  // the smileys mod. This library is only loaded when
   5  // initializing or saving module settings.
   6  
   7  if(!defined("PHORUM") && !defined("PHORUM_ADMIN")) return;
   8  
   9  // A match for filtering files that are accepted as smiley images.
  10  define('MOD_SMILEYS_IMAGE_MATCH', '/^.+\.(gif|png|jpg|jpeg)$/i');
  11  
  12  // A match for matching absolute file paths. Paths that I could think of:
  13  // UNIX path        /...
  14  // URL              proto://...
  15  // Windows path     X:\... or X:/...
  16  // Windows net path \\...
  17  define('MOD_SMILEYS_ABSPATH_MATCH', '!^/|^\w+://|^\w:[/\\\\]|^\\\\\\\\!i');
  18  
  19  // The default smiley prefix path.
  20  global $MOD_SMILEY_DEFAULT_PREFIX;
  21  $MOD_SMILEY_DEFAULT_PREFIX = './mods/smileys/images/';
  22  
  23  // The default list of smileys to install upon initial setup.
  24  global $MOD_SMILEY_DEFAULT_SMILEYS;
  25  $MOD_SMILEY_DEFAULT_SMILEYS = array(
  26      "(:P)"      => "smiley25.gif spinning smiley sticking its tongue out",
  27      "(td)"      => "smiley23.gif thumbs down",
  28      "(tu)"      => "smiley24.gif thumbs up",
  29      ":)-D"      => "smiley15.gif smileys with beer",
  30      ">:D<"      => "smiley14.gif the finger smiley",
  31      "(:D"       => "smiley12.gif smiling bouncing smiley",
  32      "8-)"       => "smilie8.gif  eye rolling smiley",
  33      ":)o"       => "smiley16.gif drinking smiley",
  34      "::o"       => "smilie10.gif eye popping smiley",
  35      "B)-"       => "smilie7.gif  smoking smiley",
  36      ":("        => "smilie2.gif  sad smiley",
  37      ":)"        => "smilie1.gif  smiling smiley",
  38      ":?"        => "smiley17.gif moody smiley",
  39      ":D"        => "smilie5.gif  grinning smiley",
  40      ":P"        => "smilie6.gif  tongue sticking out smiley",
  41      ":S"        => "smilie11.gif confused smiley",
  42      ":X"        => "smilie9.gif  angry smiley",
  43      ":o"        => "smilie4.gif  yawning smiley",
  44      ";)"        => "smilie3.gif  winking smiley",
  45      "B)"        => "cool.gif     cool smiley",
  46      "X("        => "hot.gif      hot smiley",
  47  );
  48  
  49  /**
  50   * Sets up initial settings for the smileys mod or upgrades
  51   * the settings from old versions.
  52   * @return modinfo - Updated module information.
  53   */
  54  function phorum_mod_smileys_initsettings()
  55  {
  56      $PHORUM = $GLOBALS["PHORUM"];
  57      global $MOD_SMILEY_DEFAULT_PREFIX;
  58      global $MOD_SMILEY_DEFAULT_SMILEYS;
  59      $modinfo = isset($PHORUM["mod_smileys"]) ? $PHORUM["mod_smileys"] : array();
  60  
  61      // Keep track if we need to store settings in the database.
  62      $do_db_update = false;
  63  
  64      // Set default for the image prefix path.
  65      if(! isset($modinfo['prefix'])) {
  66          $modinfo['prefix'] = $MOD_SMILEY_DEFAULT_PREFIX;
  67          // So phorum_mod_smileys_available() sees it right away.
  68          $GLOBALS["PHORUM"]["mod_smileys"]["prefix"] = $MOD_SMILEY_DEFAULT_PREFIX;
  69          $do_db_update = true;
  70      }
  71  
  72      // Set a default list of smileys or upgrade from existing smiley mod.
  73      if (! isset($modinfo['smileys']))
  74      {
  75          $modinfo['smileys'] = array();
  76  
  77          // Check if we have smileys from the previous version of the
  78          // smiley mod. These were stored at the same level as the
  79          // settings.
  80          $upgrade_list = array();
  81          if (isset($PHORUM["mod_smileys"])) {
  82              foreach ($PHORUM["mod_smileys"] as $id => $smiley) {
  83                  if (is_numeric($id)) {
  84                      $upgrade_list[$id] = $smiley;
  85                  }
  86              }
  87          }
  88  
  89          // We have an existing list of smileys to upgrade. Move the
  90          // smileys to their new location.
  91          if (count($upgrade_list)) {
  92              foreach ($upgrade_list as $id => $smiley) {
  93                  unset($modinfo[$id]);
  94                  $modinfo["smileys"][$id] = $smiley;
  95              }
  96              $do_db_update = true;
  97          }
  98          // Set an initial list of smileys.
  99          else {
 100              foreach ($MOD_SMILEY_DEFAULT_SMILEYS as $search => $data) {
 101                  list($smiley, $alt) = preg_split('/\s+/', $data, 2);
 102                  $modinfo["smileys"][] = array(
 103                      "search"    => $search,
 104                      "alt"       => $alt,
 105                      "smiley"    => $smiley,
 106                      "uses"      => 2,
 107                  );
 108              }
 109              $do_db_update = true;
 110          }
 111      }
 112  
 113      // Store the changed settings in the database. Errors are
 114      // silently ignored here, to keep them away from end-users.
 115      if ($do_db_update) {
 116          list($modinfo, $message) = phorum_mod_smileys_store($modinfo);
 117          $GLOBALS["PHORUM"]["mod_smileys"] = $modinfo;
 118          return $modinfo;
 119      }
 120  }
 121  
 122  /**
 123   * Reads in the list of available smiley images.
 124   * @return smileys - An array of smiley image filenames.
 125   */
 126  function phorum_mod_smileys_available()
 127  {
 128      $PHORUM = $GLOBALS["PHORUM"];
 129  
 130      $available_smileys = array();
 131      if(file_exists($PHORUM['mod_smileys']['prefix'])){
 132          $d = dir($PHORUM['mod_smileys']['prefix']);
 133          while($entry=$d->read()) {
 134              if(preg_match(MOD_SMILEYS_IMAGE_MATCH, $entry)) {
 135                  $available_smileys[$entry]=$entry;
 136              }
 137          }
 138      }
 139      asort($available_smileys);
 140      return $available_smileys;
 141  }
 142  
 143  /**
 144   * Compiles replacement arrays for the smileys mod and stores the
 145   * data for the module in the database.
 146   * @param modinfo - The configuration array for mod_smileys.
 147   * @return result - An array containing two elements:
 148   *                  updated module info or NULL on failure and
 149   *                  a message that can be displayed to the user.
 150   */
 151  function phorum_mod_smileys_store($modinfo)
 152  {
 153      // Get the current list of available smiley images.
 154      $available_smileys = phorum_mod_smileys_available();
 155  
 156      // Sort the smileys by length. We need to do this to replace the
 157      // longest smileys matching strings first. Else for example the
 158      // smiley ":)-D" could end up as (smileyimage)-D, because ":)"
 159      // was replaced first.
 160      uasort($modinfo["smileys"],'phorum_mod_smileys_sortbylength');
 161  
 162      // Create and fill replacement arrays for subject and body.
 163      $smiley_subject_key = array();
 164      $smiley_subject_val = array();
 165      $smiley_body_key = array();
 166      $smiley_body_val = array();
 167      $seen_images = array();
 168      foreach ($modinfo["smileys"] as $id => $smiley)
 169      {
 170          // Check if the smiley image is available. Skip and keep track
 171          // of missing smiley images.
 172          $active = isset($available_smileys[$smiley["smiley"]]) ? true : false;
 173          $modinfo["smileys"][$id]['active'] = $active;
 174          if (! $active) continue;
 175  
 176          // Check if the smiley image has been seen before. If is has, mark
 177          // the current smiley as being an alias. This is used in the editor
 178          // smiley help, to show only one version of a smiley image.
 179          $is_alias = isset($seen_images[$smiley["smiley"]]) ? true : false;
 180          $seen_images[$smiley["smiley"]] = 1;
 181          $modinfo["smileys"][$id]["is_alias"] = $is_alias;
 182  
 183          // Create HTML image code for the smiley.
 184          $prefix = $modinfo["prefix"];
 185          $src = htmlspecialchars("$prefix{$smiley['smiley']}");
 186          $alttxt = empty($smiley['alt']) ? $smiley["search"] : $smiley["alt"];
 187          $alt = htmlspecialchars($alttxt);
 188          $img = "<img class=\"mod_smileys_img\" src=\"$src\" alt=\"$alt\" title=\"$alt\"/>";
 189  
 190          // Below we use htmlspecialchars() on the search string.
 191          // This is done, because the smiley mod is run after formatting
 192          // by Phorum, so characters like < and > are HTML escaped.
 193  
 194          // Body only replace (0) or subject and body replace (2).
 195          if ($smiley['uses'] == 0 || $smiley['uses'] == 2) {
 196              $smiley_body_key[] = htmlspecialchars($smiley['search']);
 197              $smiley_body_val[] = $img;
 198          }
 199  
 200          // Subject only replace (1) or subject and body replace (2).
 201          if ($smiley['uses'] == 1 || $smiley['uses'] == 2) {
 202              $smiley_subject_key[] = htmlspecialchars($smiley['search']);
 203              $smiley_subject_val[] = $img;
 204          }
 205      }
 206  
 207      // Store replacement arrays in the module settings.
 208      $modinfo["replacements"] = array(
 209          "subject" => count($smiley_subject_key)
 210                     ? array($smiley_subject_key, $smiley_subject_val)
 211                     : NULL,
 212          "body"    => count($smiley_body_key)
 213                     ? array($smiley_body_key, $smiley_body_val)
 214                     : NULL
 215      );
 216  
 217      // For quickly determining if the smiley replacements must be run.
 218      $modinfo["do_smileys"] = $modinfo["replacements"]["subject"] != NULL ||
 219                               $modinfo["replacements"]["body"] != NULL;
 220  
 221      // Store the module settings in the database.
 222      if (! phorum_db_update_settings(array("mod_smileys" => $modinfo))) {
 223          return array(NULL, "Saving the smiley settings to the database failed.");
 224      } else {
 225          return array($modinfo, "The smiley settings were successfully saved.");
 226      }
 227  }
 228  
 229  /**
 230   * A callback function for sorting smileys by their search string length.
 231   * usage: uasort($array_of_smileys, 'phorum_mod_smileys_sortbylength');
 232   */
 233  function phorum_mod_smileys_sortbylength($a, $b) {
 234      if (isset($a["search"]) && isset($b["search"])) {
 235          if (strlen($a["search"]) == strlen($b["search"])) {
 236              return strcmp($a["search"], $b["search"]);
 237          } else {
 238              return strlen($a["search"]) < strlen($b["search"]);
 239          }
 240      } else {
 241          return 0;
 242      }
 243  }
 244  ?>


Généré le : Thu Nov 29 12:22:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics