#!/usr/bin/perl -w
#
# This file is part of the exilog suite.
#
# http://duncanthrax.net/exilog/
#
# (c) Tom Kistner 2004
#
# See LICENSE for licensing information.
#

package exilog_util;
use Time::Local;
use POSIX qw( strftime );
use strict;
use exilog_config;

BEGIN {
  use Exporter;
  use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);

  # set the version for version checking
  $VERSION     = 0.1;
  @ISA         = qw(Exporter);
  @EXPORT      = qw(
                      &edt
                      &edv
                      &ina
                      &date_to_stamp
                      &stamp_to_date
                      &human_size
                   );

  %EXPORT_TAGS = ();

  # your exported package globals go here,
  # as well as any optionally exported functions
  @EXPORT_OK   = qw();
}


# checks if scalar is in array
sub ina {
  my $aref = shift || [];
  my $str = shift || "";

  unless (ref($aref) eq 'ARRAY') {
    $aref = [ $aref ];
  };

  foreach (@{ $aref }) {
    return 1 if ($_ eq $str);
  };
  return 0;
};


# exists, defined and true (in perl sense)
sub edt {
  my $h = shift;
  my $hkey = shift;
  return 0 unless (ref($h) eq 'HASH');
  return 1 if ( exists($h->{$hkey}) &&
                defined($h->{$hkey}) &&
                $h->{$hkey} );
  return 0;
};


# exists, defined and valid (that is, not empty)
sub edv {
  my $h = shift;
  my $hkey = shift;
  return 0 unless (ref($h) eq 'HASH');
  return 1 if ( exists($h->{$hkey}) &&
                defined($h->{$hkey}) &&
                $h->{$hkey} ne '' );
  return 0;
};


sub date_to_stamp {
  my $date = shift || "";
  my $tod = shift || "00:00:00";
  my ($year,$month,$mday) = split /\-/, $date;
  my ($hour,$minute,$second,$junk) = split /[: ]/, $tod;
  $year-=1900;
  $month--;

	# This is for parsing timestamps that include GMT offsets
  if (edv($junk)) {
    my $hoff = ($junk =~ /[-+](\d\d)\d\d/);
    my $moff = ($junk =~ /[-+]\d\d(\d\d)/);
    if ($junk =~ /\+/) {
      $hour = $hour - $hoff;
      $minute = $minute - $moff;
    }
    else {
      $hour = $hour + $hoff;
      $minute = $minute + $moff;
    }   
  };

  if ($config->{web}->{timestamps} eq 'local') {
    return timelocal($second,$minute,$hour,$mday,$month,$year);
  }
  else {
    return timegm($second,$minute,$hour,$mday,$month,$year);
  };
};


sub stamp_to_date {
  my $stamp = shift;
  my $no_seconds = shift || 0;
  # convert to date/time string
  if ($config->{web}->{timestamps} eq 'local') {
    return ($no_seconds ? strftime("%Y-%m-%d %H:%M",localtime($stamp)) : strftime("%Y-%m-%d %H:%M:%S",localtime($stamp)));
  }
  else {
    return ($no_seconds ? strftime("%Y-%m-%d %H:%M",gmtime($stamp)) : strftime("%Y-%m-%d %H:%M:%S",gmtime($stamp)));
  };
};

sub human_size {
  my $size = shift;
  my @units = ( '', 'k', 'M', 'G' );
  while ( ($size > 9999) && ((scalar @units) > 1) ) {
    shift @units;
    $size = int($size/1024);
  };
  return $size.$units[0];
};


1;


syntax highlighted by Code2HTML, v. 0.9.1