rotering-net.de WIKI
Sie befinden sich hier: rotering-net.de WIKI » Deutsch » clf » file0

Dies ist eine alte Version des Dokuments!


clf_main.php

Version: 1.1.26 beta
Standalone: no
Interpreter: PHP >4.x.x
Includes: clf_messages.php
Required functions: null
Required variables: $_POST, $phpbb_root_path, $phpEx

<?php
 
 // Security Check: Is this script called by a valid phpBB script?
 if (!defined('IN_PHPBB')) {
  header('HTTP/1.1 403 Forbidden');
  die('<b>403 Forbidden</b><br />This script cannot be called directly.');
 }
 
 
 // Define the current script version and upload path
 $clf_version = '1.1.26 beta';
 $clf_uploadpath = 'users/temp/';
 
 // Retrieve chat log
 $clf_src = $_POST['chatlog'];
 
 
 // Do local file upload when set
 if (isset($_POST['upload'])) {
 
  // Did we receive a file?
  if (!isset($_FILES['chatlog_file']['tmp_name'])) {
   $clf_errormsg = 'Die Datei wurde fehlerhaft übertragen oder konnte aus unbekanntem Grund nicht auf dem Webserver gespeichert werden. Bitte versuchen Sie den Upload erneut. Sollte das Problem fortbestehen, informieren Sie bitte den Administrator.';
 
  // Did we receive a text file?
  } elseif (!substr($_FILES['chatlog_file']['type'], 0, 5) == 'text/') {
   $clf_errormsg = 'Diesen Dateityp können Sie nicht hochladen. Erlaubt sind nur Textdateien.';
 
  // Is the text file to huge?
  } elseif ($_FILES['chatlog_file']['size'] > 256000) {
   $clf_errormsg = 'Diese Datei ist zu groß. Es können nur Textdateien bis maximal 250 kB verarbeitet werden.';
 
  // Move file and get its content
  } else {
   $clf_filename = $phpbb_root_path . $clf_uploadpath . microtime() . '.txt';
   move_uploaded_file($_FILES['chatlog_file']['tmp_name'], $clf_filename);
   $clf_src = file_get_contents($clf_filename);
   unlink($clf_filename);
  }
 }  
 
 
 // Analyse chat log when there is a chat log
 if ($clf_src != '' && $clf_errormsg == '') {
 
  // Define this as parsed stage
  $clf_stage = 1;
 
  // Load predefined messages
  require_once($phpbb_root_path . 'includes/clf_messages.' . $phpEx); 
 
  // Prepare predefined arrays for preg_match
  $clf_systemmsg_preg = clfCreateRegExList($clf_systemmsg);
  $clf_actionmsg_preg = clfCreateRegExList($clf_actionmsg);
 
  // Init some variables
  $clf_atom = array();
  $clf_players = array();
  $m = 0;
 
  // Split chat log to single lines
  $clf_line = explode("\r\n", $clf_src);
 
  // Scan every single line
  for ($n=0; $n<count($clf_line); $n++) {
   if ($clf_line[$n] != '') {
    $clf_atom[$m]['date'] = clfGetDate($clf_line[$n]);
    $clf_atom[$m]['msg'] = clfGetMsg($clf_line[$n]);
    $clf_atom[$m]['type'] = clfGetMsgType($clf_atom[$m]['msg'], $clf_msg_id);
    $clf_atom[$m]['msg_id'] = $clf_msg_id;
 
    switch ($clf_atom[$m]['type']) {
     case 0: // Player Chat Message | "{player}: {text}"
      $clf_atom[$m]['player'] = clfGetMsgReferer($clf_atom[$m]['msg']);
      $clf_atom[$m]['text'] = clfGetMsgText($clf_atom[$m]['msg']);
      $clf_players[] = $clf_atom[$m]['player'];
      break;
 
     case 1: // Player Status Message | "{player} ({status}):"
      //$clf_referer = clfGetMsgReferer($clf_atom[$m]['msg']);
      //$clf_atom[$m]['player'] = clfGetMsgPlayer_a($clf_referer);
      //$clf_atom[$m]['status'] = chatlog_getmsgstatus($clf_referer);
      //$clf_players[] = $clf_atom[$m]['player'];
      break;
 
     case 2: // Private Message Incoming | "From {player} in {location}: {text}"
      $clf_msg = substr($clf_atom[$m]['msg'], 5);
      $clf_referer = clfGetMsgReferer($clf_msg);
      $clf_atom[$m]['player'] = clfGetMsgPlayer($clf_referer);
      $clf_atom[$m]['location'] = clfGetMsgLocation($clf_referer);
      $clf_atom[$m]['text'] = clfGetMsgText($clf_atom[$m]['msg']);
      $clf_players[] = $clf_atom[$m]['player'];
      break;
 
     case 3: // Private Reply Outgoing | "To {player} in {location}: {text}"
      $clf_msg = substr($clf_atom[$m]['msg'], 3);
      $clf_referer = clfGetMsgReferer($clf_msg);
      $clf_atom[$m]['player'] = clfGetMsgPlayer($clf_referer);
      $clf_atom[$m]['location'] = clfGetMsgLocation($clf_referer);
      $clf_atom[$m]['text'] = clfGetMsgText($clf_atom[$m]['msg']);
      $clf_players[] = $clf_atom[$m]['player'];
      break;  
 
     case 4: // Private Message Outgoing | "To {playername}: {text}"
      $clf_msg = substr($clf_atom[$m]['msg'], 3);
      $clf_atom[$m]['player'] = clfGetMsgReferer($clf_msg);
      $clf_atom[$m]['text'] = clfGetMsgText($clf_atom[$m]['msg']);
      $clf_players[] = $clf_atom[$m]['player'];      
      break;
 
     case 5: // System Message | "{text}"
      clfExplodeSystemMsg($clf_atom[$m]['msg'], $clf_atom[$m]['msg_id'], $clf_player, $clf_text);
      $clf_atom[$m]['player'] = $clf_player;
      $clf_atom[$m]['text'] = $clf_text;
      break;
 
     case 6: // Action Message | "{text{player}text}"
      clfExplodeActionMsg($clf_atom[$m]['msg'], $clf_atom[$m]['msg_id'], $clf_player, $clf_text);
      $clf_atom[$m]['player'] = $clf_player;
      $clf_atom[$m]['text'] = $clf_text;
      $clf_players[] = $clf_atom[$m]['player'];
      break;
 
     case 7: // Personal Action Message | "{player} {text}"
      // We cannot get any useful information in this stage, needs a second pass
      break;
 
     case 8: // Error Message | "Error: {text}"
      $clf_atom[$m]['text'] = substr($clf_atom[$m]['msg'], 7);
      break;
 
     case 9: // Private Reply Incoming | "From {playername}: {text}"
      $clf_msg = substr($clf_atom[$m]['msg'], 5);
      $clf_atom[$m]['player'] = clfGetMsgReferer($clf_msg);
      $clf_atom[$m]['text'] = clfGetMsgText($clf_atom[$m]['msg']);
      $clf_players[] = $clf_atom[$m]['player'];      
      break;
 
     case 10: // Fun Messages | "There is no feather."
      // Nobody needs them in a chatlog anyway, so dump them
      break;     
    }
    $m++;
   }
  }
 
  // Remove duplicates from player list and sort it
  $clf_players = array_unique($clf_players);
  sort($clf_players);
 
  // Second pass for personal action messages
  for ($n=0; $n<count($clf_atom); $n++) {
   if ($clf_atom[$n]['type'] == 7) {
    $clf_playerfound = clfExplodePersActionMsg($clf_atom[$n]['msg'], $clf_player, $clf_text);
    $clf_atom[$n]['player'] = $clf_player;
    $clf_atom[$n]['text'] = $clf_text;
 
    if (!$clf_playerfound) {
     $clf_players[] = $clf_atom[$n]['player'];
     $clf_playersexpanded = true;
    }
   }
  }
 
  // If there are new players in the list after second pass, remove duplicates and sort again
  if ($clf_playersexpanded) {
   $clf_players = array_unique($clf_players);
   sort($clf_players);
  }
 
  // Format the chat log
  if (isset($_POST['format'])) {
 
   // Define this as final stage
   $clf_stage = 2;
 
   // Preserve the chat log and clear it
   // $clf_old = $clf_src;
   $clf_src = '';
 
   // Create a format string for the selected date format
   switch ($_POST['date-type']) {
    case 0: // Remove the date
     $clf_dateformat = ''; break;
    case 1: // Uru Live format
     $clf_dateformat = '\[m/d H:i:s\]'; break;
    case 2: // Format of the forum
     $clf_dateformat = '\[' . $board_config['default_dateformat'] . '\]'; break;
    case 3: // Format of the user, if available; otherwise as case 2
     $clf_dateformat = '\[' . ($userdata['user_dateformat'] == '' ? $board_config['default_dateformat'] : $userdata['user_dateformat']) . '\]'; break;   
    case 4: // User-defined format
     $clf_dateformat = $_POST['date-format']; break;
    case 5: // Only time (European)
     $clf_dateformat = '\[H:i:s\]'; break;
    case 6: // Only time (American)
     $clf_dateformat = '\[h:i:s a\]'; break;
   }
 
   // Determine the missing year
   if ($_POST['dateyear'] >= 1970 && $_POST['dateyear'] <= 2037) {
    $clf_dateyear = (int)$_POST['dateyear'];
   } else {
    $clf_dateyear = date('Y', time());
   }
 
   // Compile every single line
   for ($n=0; $n<count($clf_atom); $n++) {
    $clf_date = '';
    $clf_output = '';
 
    // Format the date/time stamp
    if ($clf_dateformat != '') {
     $clf_date = clfDateFormat($clf_atom[$n]['date'], $clf_dateyear, $clf_dateformat);
     $clf_date = clfFormat($clf_date, 'date');    
     $clf_date .= ' ';
    }
 
    // Dertemine the player key
    $clf_playerkey = clfGetPlayerKey($clf_atom[$n]['player']);
 
    switch ($clf_atom[$n]['type']) {
     case 0: // Player Chat Message
      if ($_POST['chat-type'] > 0 && $_POST[$clf_playerkey . '-type'] > 0) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);       
       $clf_output = $clf_atom[$n]['player'] . ': ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'chat');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 1: // Player Status Message
      //if ($_POST['status-type'] > 0 && $_POST[$clf_playerkey . '-type'] > 1) {
      // $clf_output = $clf_atom[$n]['player'] . ' (' . $clf_atom[$n]['status'] . ')';
      // $clf_output = chatlog_format($clf_output, $clf_playerkey, 'status');
      // $clf_output = $clf_date . $clf_output . "\r\n";
      //}
      break;
 
     case 2: // Private Message Incoming
      if ($_POST['pm-type'] > 1 && $_POST[$clf_playerkey . '-type'] > 2) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);       
       $clf_output = 'Von ' . $clf_atom[$n]['player'] . ' in ' . $clf_atom[$n]['location'] . ': ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'pm');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 3: // Private Replay Outgoing
      if (($_POST['pm-type'] == 1 || $_POST['pm-type'] > 2) && $_POST[$clf_playerkey . '-type'] > 2) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);       
       $clf_output = 'An ' . $clf_atom[$n]['player'] . ' in ' . $clf_atom[$n]['location'] . ': ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'pm');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 4: // Private Message Outgoing
      if (($_POST['pm-type'] == 1 || $_POST['pm-type'] > 2) && $_POST[$clf_playerkey . '-type'] > 2) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);       
       $clf_output = 'An ' . $clf_atom[$n]['player'] . ': ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'pm');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 5: // System Message
      if ($_POST['system-type'] > 0) {
       if ($_POST['system-type'] == 1) {
        $clf_output = $clf_atom[$n]['msg'];
       } else {
        $clf_output = clfSystemMsgTranslate($clf_atom[$n]['player'], $clf_atom[$n]['msg_id']);
       }       
       $clf_output = clfFormat($clf_output, 'system');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 6: // Action Message
      if ($_POST['action-type'] > 0 && $_POST[$clf_playerkey . '-type'] > 1) {
       if ($_POST['action-type'] == 1) {
        $clf_output = $clf_atom[$n]['msg'];
       } else {
        $clf_output = clfActionMsgTranslate($clf_atom[$n]['player'], $clf_atom[$n]['msg_id']);
       }
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'action');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 7: // Personal Action Message
      if ($_POST['action-type'] > 0 && $_POST[$clf_playerkey . '-type'] > 1) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);
       $clf_output = $clf_atom[$n]['player'] . ' ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'action');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
 
     case 8: // Error Message
      if ($_POST['error-type'] > 0) {
       $clf_output = 'Fehler: ' . $clf_atom[$n]['text'];
       $clf_output = clfFormat($clf_output, 'error');
       $clf_output = $clf_date . $clf_output . "\r\n";      
      }
      break;
 
     case 9: // Private Reply Incoming
      if (($_POST['pm-type'] > 1) && $_POST[$clf_playerkey . '-type'] > 2) {
       $clf_output = clfReplaceDiacritics($clf_atom[$n]['text'], $_POST['diacritics-type']);       
       $clf_output = 'Von ' . $clf_atom[$n]['player'] . ': ' . $clf_output;
       $clf_output = clfFormat($clf_output, $clf_playerkey, 'pm');
       $clf_output = $clf_date . $clf_output . "\r\n";
      }
      break;
    }
    //$chatlog .= '[' . $clf_atom[$n]['type'] . '] ';
    $clf_src .= $clf_output;
   }
  }
 }
 
 
 // Extracts the date/time stamp from a chatline
 function clfGetDate ($chatline) {
  return substr($chatline, 0, strpos($chatline, ') ') + 1);
 }
 
 // Extracts the message from a chatline
 function clfGetMsg ($chatline) {
  return substr($chatline, strpos($chatline, ') ') + 2);
 }
 
 // Extracts the referer from a message
 function clfGetMsgReferer ($chatmsg) {
  $chatreferer = substr($chatmsg, 0, strpos($chatmsg, ': '));
  return trim($chatreferer);
 }
 
 // Extracts the text from a message
 function clfGetMsgText ($chatmsg) {
  $chattext = substr($chatmsg, strpos($chatmsg, ': ') + 1);
  return trim($chattext);
 }
 
 // Extracts the player from a referer
 function clfGetMsgPlayer ($chatreferer) {
  $chatplayer = substr($chatreferer, 0, strpos($chatreferer, ' in '));
  return trim($chatplayer);
 }
 
 // Extracts the location of the player from a referer
 function clfGetMsgLocation ($chatreferer) {
  $chatlocation = substr($chatreferer, strpos($chatreferer, ' in ') + 4);
  return trim($chatlocation);
 } 
 
 
 
 
 function chatlog_getmsgplayer_a ($chatreferer) {
  return substr($chatreferer, 0, strpos($chatreferer, ' ('));
 }
 
 // Extracts player and text from a sytem message
 function clfExplodeSystemMsg ($chatmsg, $msgid, &$chatplayer, &$chattext) {
  global $clf_systemmsg_preg;
 
  if (preg_match($clf_systemmsg_preg[$msgid], $chatmsg, $res) == 1) {
   $chatplayer = $res[1];
   $chattext = str_replace($chatplayer, '%1', $chatmsg);
   return true;
  }
 }    
 
 // Extracts player and text from a action message
 function clfExplodeActionMsg ($chatmsg, $msgid, &$chatplayer, &$chattext) {
  global $clf_actionmsg_preg;
 
  if (preg_match($clf_actionmsg_preg[$msgid], $chatmsg, $res) == 1) {
   $chatplayer = trim($res[1]);
   $chattext = str_replace($chatplayer, '%1', $chatmsg);
   return true;
  }
 }
 
 // Extracts player and text from a personal action message
 function clfExplodePersActionMsg ($chatmsg, &$chatplayer, &$chattext) {
  global $clf_players;
 
  // First try: Check player list for matching player names
  for ($n=0; $n<count($clf_players); $n++) {
   if (substr($chatmsg, 0, strlen($clf_players[$n]) + 1)  == $clf_players[$n] . ' ') {
    $chatplayer = $clf_players[$n];
    $chattext = substr($chatmsg, strlen($chatplayer) + 1);
    return true;
   }
  }
 
  // Second try: Suppose player name has no whitespaces in between and split at first whitespace
  $whitespace_pos = strpos($chatmsg, ' ', 1);
  $chatplayer = substr($chatmsg, 0, $whitespace_pos);
  $chattext = substr($chatmsg, $whitespace_pos + 1);
  return false;  
 }
 
 // Tries to determine the type of a message
 function clfGetMsgtype ($chatmsg, &$msgid) {
  if (substr($chatmsg, 0, 1) == ' ') {
   if (substr($chatmsg, 1, 2) == ' ') {
    return 10; // Fun Message
   } else {
    $chatmsg = trim($chatmsg);
    if (substr($chatmsg, strlen($chatmsg) - 1, 1) == ':') {
     return 1; // Player Status Message
    } else {
     return 0; // Player Chat Message
    }
   }
  } else {
   if (substr($chatmsg, 0, 3) == 'To ') {
    if (strpos(clfGetMsgReferer($chatmsg), ' in ') > 0) {
     return 3; // Private Reply Outgoing
    } else {
     return 4; // Private Message Outgoing
    }
   } elseif (substr($chatmsg, 0, 5) == 'From ') {
    if (strpos(clfGetMsgReferer($chatmsg), ' in ') > 0) {
     return 2; // Private Message Incoming
    } else {
     return 9; // Private Reply Incoming
    }
   } elseif (substr($chatmsg, 0, 7) == 'Error: ') {
    return 8; // Error
   } elseif (clfIsSystemMsg($chatmsg, $msgid)) {
    return 5; // System Message
   } elseif (clfIsActionMsg($chatmsg, $msgid)) {
    return 6; // Action Message
   } else {
    return 7; // Personal Action Message
   }
  }
 }
 
 // Detects if message matches a known system message
 function clfIsSystemMsg ($chatmsg, &$msgid) {
  global $clf_systemmsg_preg;
 
  for ($n=0; $n<count($clf_systemmsg_preg); $n++) {
   if (preg_match($clf_systemmsg_preg[$n], $chatmsg) == 1) {
    $msgid = $n; return true;
   }
  }
 }
 
 // Detects if message matches a known action message
 function clfIsActionMsg ($chatmsg, &$msgid) {
  global $clf_actionmsg_preg;
 
  for ($n=0; $n<count($clf_actionmsg_preg); $n++) {
   if (preg_match($clf_actionmsg_preg[$n], $chatmsg) == 1) {
    $msgid = $n; return true;
   }
  }
 }
 
 // Converts all strings inside an array to a regular expression, replacing %1 with a
 // variable term
 function clfCreateRegExList ($list) {
  for ($n=0; $n<count($list); $n++) {
   $list[$n] = '/^' . str_replace('%1', '(.+)', preg_quote($list[$n])) . '$/';
  }
  return $list;
 }
 
 
 
 
 
 function chatlog_getmsgstatus ($chatreferer) {
  $chatreferer = substr($chatreferer, strpos($chatreferer, ' (' + 2));
  return substr($chatrefer, 0, strlen($chatreferer) - 1);
 }
 
 
 
 
 // Converts a date/time stamp to another format
 function clfDateFormat ($datestring, $datestring_date_year, $dateformat) {
  $datestring = substr($datestring, 1, strlen($datestring) - 2);
 
  $datestring_split = explode(' ', $datestring, 2);
  $datestring_date = $datestring_split[0];
  $datestring_time = $datestring_split[1];
 
  $datestring_date_split = explode('/', $datestring_date, 2);
  $datestring_date_month = $datestring_date_split[0];
  $datestring_date_day = $datestring_date_split[1];
 
  $datestring_time_split = explode(':', $datestring_time, 3);
  $datestring_time_hour = $datestring_time_split[0];
  $datestring_time_minute = $datestring_time_split[1];
  $datestring_time_second = $datestring_time_split[2];
 
  $timestamp = mktime($datestring_time_hour, $datestring_time_minute, $datestring_time_second,
   $datestring_date_month, $datestring_date_day, $datestring_date_year);
 
  return date($dateformat, $timestamp); 
 }
 
 // BB code format a string
 function clfFormat ($string, $key1, $key2 = '') {
  if (isset($_POST[$key1 . '-style-underline']) || isset($_POST[$key2 . '-style-underline']))
   $string = '[u]' . $string . '[/u]';
  if (isset($_POST[$key1 . '-style-italic']) || isset($_POST[$key2 . '-style-italic']))
   $string = '[i]' . $string . '[/i]';
  if (isset($_POST[$key1 . '-style-bold']) || isset($_POST[$key2 . '-style-bold']))
   $string = '[b]' . $string . '[/b]';
  if ($_POST[$key1 . '-style-color'] != '')
   $string = '[color=' . $_POST[$key1 . '-style-color'] . ']' . $string . '[/color]';
  elseif ($_POST[$key2 . '-style-color'] != '')
   $string = '[color=' . $_POST[$key2 . '-style-color'] . ']' . $string . '[/color]';
  return $string;
 }
 
 // Create a unique, html valid player key
 function clfGetPlayerKey ($player) {
  return 'player-' . rawurlencode($player);
 } 
 
 // Translate a system message
 function clfSystemMsgTranslate ($chatplayer, $msgid) {
  global $clf_systemmsg_de;
  return str_replace('%1', $chatplayer, $clf_systemmsg_de[$msgid]);
 }
 
 // Translate an action message
 function clfActionMsgTranslate ($chatplayer, $msgid) {
  global $clf_actionmsg_de;
  return str_replace('%1', $chatplayer, $clf_actionmsg_de[$msgid]);
 }
 
 // Replace paraphrased German diacritics with umlauts and sharp S
 function clfReplaceDiacritics ($string, $mode) {
  if ($mode > 0) {
   $string = str_replace('Ae', 'Ä', $string);
   $string = str_replace('Oe', 'Ö', $string);
   $string = str_replace('Ue', 'Ü', $string);
   $string = str_replace('ae', 'ä', $string);
   $string = str_replace('oe', 'ö', $string);
   $string = preg_replace('/([^(a|ä|e|u|q)])ue/', '$1ü', $string);
 
   if ($mode > 1) {
    $string = preg_replace('/(ah|äh|eh|ih|oh|öh|uh|üh|aa|äa|ee|ii|oo|öo|uu|üu|ai|au|äu|ei|eu|ie|ui)ss/', '$1ß', $string);
   }
  }
  return $string;
 }
 
?>
Previous Next

rotering-net.de WIKI

Table of Contents

Deutsch

Software

  • Myst-Explorer's Toolkit
  • Untìl Uru Locator

Sonstiges

  • Dateitypen Referenz
  • c64