<?PHP
//
//
// Small helper functions
//

/*

    This file was written by Thorsten Gunkel <tgunkel@gmx.de> to create
    most pages of <url:http://www.tgunkel.de>.
    Copyright (C) 2003 Thorsten Gunkel

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*/


// Extract _GET or _POST Value of varname
function import_get_or_post($varname)
{
  if (isset(
$_POST[$varname]))
    {
      return 
$_POST[$varname];
    }
  else
    {
      if (isset(
$_GET[$varname]))
    {
      return 
$_GET[$varname];
    }
    }
}

// Undo stupid (but safer) escaping with \ done by PHP if you get something by <form>
function get_form_undo_escaped($string)
{
  
// Remove all single \ (they must have been added because normal \ where converted to \\
  
$string=preg_replace("/([^\\\]|^)\\\([^\\\]|$)/","$1$2",$string);
  
// Undo \ escaping. \ where converted to \\
  
$string=preg_replace("/(\\\){2,2}/",'\\',$string);
  return 
$string;
}

// removes leading + trailing + double line breaks
function get_fixed_line_break($text)
{
  
// remove leading line breaks
  
$text=get_remove_leading_line_break($text);

  
// remove trailing line breaks
  
$text=get_remove_trailing_line_break($text);

  
// uniq line breaks
  
$text=get_uniq_line_break($text);

  return 
$text;
}

// removed any leading line breaks
function get_remove_leading_line_break($text)
{
  
$text=preg_replace("/^(\r\n|\r|\n)+/"''$text);
  return 
$text;
}

// removed any leading line breaks
function get_remove_trailing_line_break($text)
{
  
$text=preg_replace("/(\r\n|\r|\n)+$/"''$text);
  return 
$text;
}

// linewarp* -> linebreak
function get_uniq_line_break($text)
{
  
$text=preg_replace("/(\r\n|\r|\n)+/""\n"$text);
  return 
$text;
}

// remove / replace line warp
function replace_line_break($text,$new)
{
  
$text preg_replace("/\r\n|\r|\n/"$new$text);
  return 
$text;
}

// replace line break with <br />
function my_nl2br($string)
{
  
$string=nl2br($string);
  
// Zeilenumbruch entfernen
  
$string=replace_line_break($string,'');
  return 
$string;
}

// get path of a file
function get_pathoffile($datei)
{
  
$datei=preg_replace('/[^\/]*$/','',$datei);
  return 
$datei;
}

// get name of a file (without path)
function get_nameoffile($datei)
{
  
$datei=preg_replace('/^.*\//','',$datei);
  return 
$datei;
}

// return a string with $nr spaces
function get_spaces($nr)
{
  
$ergb="";
  for (
$i1=0$i1<$nr$i1++)
    {
      
$ergb.=" ";
    }
  return 
$ergb;
}

// return a string which is at least $min_length long, if neccesary, $string_to_prepend is put bevor the string as long as the string isn't no enough
function get_min_length_with_leading_chars($min_length,$string_to_prepend,$string)
{
  while (
strlen($string)<$min_length)
    {
      if (
strlen($string)<(strlen($string_to_prepend.$string)))
        {
          
$string=$string_to_prepend.$string;
        }
      else
        {
          echo 
"Error: function get_min_length_with_leading_chars detected infinity loop";
          exit();
        }
    }
  return 
$string;
}

/* Tell client when our file was modified the last time
 * If the client already has a cached version with this date tell him
 * to use this version to save our bandwith
 * WARNING: Call this funtion bevor any other (non-header) output
 */
function use_cache($lastmodtime)
{
  
// lastmodtime==0 is a mistake in most cases
  
if ($lastmodtime>0)
    {
      
$lastmodtime_long=gmdate('D, d M Y H:i:s'$lastmodtime).' GMT';
      
header("Last-Modified: ".$lastmodtime_long);
      if (
array_key_exists('HTTP_IF_MODIFIED_SINCE'$_SERVER))
        {
          if (
$_SERVER['HTTP_IF_MODIFIED_SINCE']==$lastmodtime_long)
            {
              
header("HTTP/1.0 304 Not Modified");
              exit;
            }
        }
    }
}

/* 
 * Check if DIR exists and if not try to mkdir it
 *
 */
function mkdir_ifnot_exists($name)
{
  if (!
file_exists($name))
    {
      
mkdir($name0777);
      if (!
file_exists($name))
    {
      die();
      exit;
    }
    }
}

// Checks if Session Variable admin is set to yes
function session_is_admin()
{
  if (
is_array($_SESSION))
    if(
array_key_exists('admin'$_SESSION))
      if (
$_SESSION['admin']=="yes")
        return 
true;
  return 
false;
}

// Checks if admpass is correct and stores the result in a SESSION
function ask_admin($admpass,$config,$force_logout)
{
  
// if true fail login and remember to fail the next login also to clear browser cache of authentification
  
if ($force_logout)
    {
      
$_SESSION['admin']="";
      
$_SESSION['admin_forcelogout']='yes';
    }
  else
    {
      
// if true fail login but remember to allow the next one
      
if ( isset($_SESSION['admin_forcelogout']) && ($_SESSION['admin_forcelogout']=='yes') )
    {
      
$_SESSION['admin_forcelogout']='';
      
$_SESSION['admin']="";
    }
      else
    {
      
// normal login
      
if (crypt($admpass,"nosalt")==$config['password'])
        {
          
$_SESSION['admin']="yes";
        }
      else
        {
          
$_SESSION['admin']="";
        }
    }
    }
}


// Overwrite Data with an other data file. Easy way to change data file
function reset_data($datei_data,$datei_resd$show_warning)
{
  if (
file_exists($datei_resd))
    {
      echo 
"OK, reset file exists...";
      if (
copy($datei_resd,$datei_data))
        {
          echo 
"OK, reset file copied...";
          if (
unlink($datei_resd))
            {
              echo 
"OK, reset file unlinked. Finished.";
            }
          else
            {
              echo 
"Faild to unlink reset file! DELETE IT YOURSELF, NOW!";
            }
        }
      else
        {
          echo 
"Failed to copy reset file!";
        }
    }
  else
    {
      if (
$show_warning) echo "Failed to find reset file!";
    }
}

/** 
 * Joins the strings path an pathOrFile and ensures that there is exactly one / between them
 * @param path Your path
 * @param pathOrFile Your other path or your file
 * 
 * @return path/pathOrFile
 */
function joinPath($path$pathOrFile)
{
  
// first remove / at the end of the first path
  
$path=preg_replace('/\/*$/','',$path);
  
  
// remove / at the beginning of the second path / file
  
$pathOrFile=preg_replace('/^\/*/','',$pathOrFile);

  
// now merge both together
  
$resultpath=$path.'/'.$pathOrFile;

  return 
$resultpath;
}

/* there are some problems if you use the filename to indentify a
 * file because different file names might point the same file:
 * - a/b.txt, a//b.txt, c/../a/b.txt
 * This method removes these ambiguouses
 */
function unifyPath($path)
{
  
/* first find out if there were / at the beginning and the end of the
   * string (might be lost otherwise)
   */
  
$slashFront=(0!=preg_match('/^\//',$path));
  
$slashBack=(0!=preg_match('/\/$/',$path));

  
$pathArray=split('/'$path);

  
// .. removes the previous entry if there is any
  
$mystack=array();
  foreach(
$pathArray as $p)
  {
    if(
$p!='')
    {
      if(
$p=='..')
      {
        if(
count($mystack)==|| $mystack[count($mystack)-1]=='..')
        {
          
array_push($mystack'..');
        }
        else
        {
          
array_pop($mystack);
        }

      }
      else
      {
        
array_push($mystack$p);        
      }
    }
  }

  
$result='';
  if(
$slashFront$result.='/';
  for(
$i=0$i<count($mystack); $i++)
  {
    if(
$i>0$result.='/';
    
$result.=$mystack[$i];
  }
  if(
$slashBack)  $result.='/';
  return 
$result;
}

?>