#!/usr/bin/perl -w package cell; use Time::HiRes qw( usleep ualarm gettimeofday tv_interval ); my $start=[gettimeofday]; use strict; use Data::Dumper; #use Server; use Kwark::Server2; use CGI; my $debug=0; my $msg=''; my $q=new CGI; print $q->header( #-cookie=> [$cookie1,$cookie2], -charset =>'UTF-8', ); my $server = Kwark::Server2->instance(); my $tmpl = $server->gettemplate('cell'); # login use Apache::Session::Postgres; my $username; my $users_id; my $sessionID = $q->cookie('sessionID') || undef; if ($sessionID){ my %session; eval{ tie %session, 'Apache::Session::Postgres', $sessionID , { Handle => $server->{'dbh'}, Commit => 0, } || die "cannot tie $!"; }; if ($session{username}){ $username = $session{username}; $users_id = $session{users_id}; $tmpl->param( username => $session{username}, users_id => $session{users_id}, loggedin => 1, ); } } # /login my $qself = $q->self_url; my $qselfs = $q->url; # rest my $qrest = $qself; $qrest =~ s!$qselfs!!; $qrest =~ s!^/!!; my (@arest) = split( /\// , $qrest); #$qrest =~ s!/$!!; $qrest = $arest[0]; if (defined($arest[1]) && $arest[1] eq 'edit'){ if ($username){ $tmpl->param( edit => '1' ); }else{ $msg .= "not logged in"; } #print Dumper(@arest); } # # parse all cells from messages # # c.id as cellid my $query = " SELECT m.created as mcreated,u.id as userid,m.id as messageid, c.id as cellid , m.cell as mcell, lpad(extract(day FROM m.created),2,'0') || '-' || lpad(extract(month FROM m.created),2,'0') || '-' || extract(year FROM m.created) || ' ' || lpad(extract(hour FROM m.created), 2, '0') || ':' || lpad(extract(minute FROM m.created), 2, '0') as mcreatedd, lpad(extract(day FROM m.created),2,'0') || '-' || lpad(extract(month FROM m.created),2,'0') || '-' || extract(year FROM m.created) as mcreateddate, lpad(extract(hour FROM m.created), 2, '0') || ':' || lpad(extract(minute FROM m.created), 2, '0') as mcreatedtime, * FROM messages as m LEFT JOIN users as u on u.phn = m.orig LEFT JOIN cell as c on c.cellstring = m.cell ORDER BY m.created desc "; # || ' +' || # lpad(extract(timezone_hour FROM m.created),2, '0') || ':00' # RIGHT JOIN cell as c on m.cell = c.cellstring print $query if $debug; my ($sth,$err) = $server->doq($query); if ($err){ $msg .= $err; }else{ my @cells; my $lastdate = ''; while (my $row = $sth->fetchrow_hashref){ if ($row->{'msg'} =~ m!cell!i ){ # parse cellnumber my ($mcc,$mnc,$lac,$cid) = $row->{'msg'} =~ m!(\d+),\s(\d+),\s(\d+),\s(\d+)!; my $pcell="$mcc-$mnc-$lac-$cid"; # update messages.cell unless ($row->{'mcell'} eq $pcell){ warn "$row->{'id'} [$row->{'cell'}] vs. [$pcell]"; my $qcell = $server->quote($pcell); my $iquery = " UPDATE messages SET cell = $qcell WHERE id = $row->{'messageid'} "; my ($isth,$ierr)=$server->doq($iquery); if ($err){ $msg .= $err; }else{ warn $iquery; } $row->{'cell'} = $pcell; # create new cell $iquery="INSERT INTO cell(cellstring) values($qcell)"; ($isth,$ierr)=$server->doq($iquery); warn $ierr if $ierr; } # extra extract my $msgextra = $row->{'msg'}; $msgextra =~ s!cell\s\(\d+,\s\d+,\s\d+,\s\d+\)(.*)!$1!; $msgextra =~ s!^\s!!; $msgextra =~ s!\s$!!; if ($msgextra){ $row->{'msgextra'} = $msgextra; } # extra insert if ($msgextra){ my $qtag = $server->quote($msgextra); my $qusers_id = $server->quote($row->{'userid'}); my $qcell_id = $server->quote($row->{'cellid'}); my $qmsgid = $server->quote($row->{'messageid'}); my $eiquery=" INSERT INTO cell_tag(cell_id,tag,users_id,message_id) VALUES ($qcell_id,$qtag,$qusers_id,$qmsgid) "; print $eiquery if $debug; my ($eisth,$eierr) = $server->doq($eiquery); if ($eierr){ warn $eierr; } } # try use Kwark::Cell; my $kcell = new Kwark::Cell; my $cc = $kcell->get( cellstring => $pcell ); #print "cc: " . Dumper($cc); my $tags = $cc->{'tags'}; # /try if ($tags){ $row->{'tags'} = $tags; #print "
" . Dumper($tags);
      }

      $row->{'qselfs'} = $qselfs;


      if ($lastdate eq $row->{'mcreateddate'}){
      }else{
	$row->{'newdate'} = $row->{'mcreateddate'};
	$lastdate = $row->{'mcreateddate'};
      }

      push @cells,$row;
    }
  }
  $tmpl->param( cells => \@cells,);
}
#
# /all
#




#
# if rest
#
if ($qrest && $q->param('tag') ){
 $tmpl->param( edit => '1' );

 #fout
 my $cell_id = $q->param('cell_id');
 
 my $tag = $q->param('tag');
 my $qtag = $server->quote($tag);
 my $qqrest = $server->quote($qrest);
 

 unless ($users_id){
  $msg .= "not logged in";
 }else{
   my $qusers_id = $server->quote($users_id);
  # my $query = "
  #  INSERT INTO rel_locationname_cell(tag,cell_id,locationname_id) 
  #  VALUES
  #  ($qtag , $cell_id, '1')
  # ";

   my $query = "
    INSERT INTO cell_tag(tag,cell_id,users_id)
    VALUES
    ($qtag , $cell_id, $qusers_id)
   ";
   my ($sth,$err)= $server->doq($query);
   if ($err){	
     $msg = $err;
   }else{
     $msg="inserted";
   }
 } # end if login
 
}

if ($qrest){
  my $cell_id;
  my $qqrest = $server->quote($qrest);
  my $query = "
   SELECT c.id as cell_id, m.* 
   FROM messages as m, cell as c 
   WHERE m.cell =  $qqrest
   AND c.cellstring = $qqrest
   ORDER BY m.created desc
  ";
  my ($sth,$err) = $server->doq($query);
  if ($err){
    $msg .= $err;
  }else{
    my @qcells;
    while (my $row = $sth->fetchrow_hashref){
      if ($row->{'msg'} =~ m!cell!i ){
	$row->{'qselfs'} = $qselfs;
	push @qcells,$row;
        $cell_id = $row->{'cell_id'};
      }
    }
    $tmpl->param( qcells => \@qcells,
		  cell_id => $cell_id
	         );
  }

  #,cell_tag as ct
  #   SELECT cell.id as cellid, ct.id as ctid, *
  # extra
  $query = "
   SELECT *
   FROM cell as c,cell_tag as ct
   LEFT JOIN locationname as ln on ln.id = ct.tag
   RIGHT JOIN users as u on ct.users_id  = u.id
   WHERE 
   c.cellstring = $qqrest
   AND c.id = ct.cell_id
  ";

  print $query if $debug;
 ($sth,$err)=$server->doq($query);
 if ($err){
  $msg .= $err; 
 }

   my @tags;
   while (my $row = $sth->fetchrow_hashref){
     #print "
" . Dumper($row) . "
"; push @tags,$row; } $tmpl->param( tags => \@tags, ); } # # /rest # # access if (1){ use Lok; my $la = Lok->new( '/gfx/Icons/ico.cell.png' ); my @hits = @{$la->updateaccess( {onlywithrefer => 1,} ) }; my $totalhits = $la->totalhits; $tmpl->param( hitsa => \@hits ); } # timing my $end=[gettimeofday]; my $elapsed = tv_interval ( $start, $end ); $tmpl->param( qrest => $qrest, elapsed => $elapsed, qselfs => $qselfs, qself => $qself, msg => $msg, ); print $tmpl->output; =head CREATE TABLE cell_tag( id serial UNIQUE, cell_id int NOT NULL, users_id int NOT NULL, tag varchar NOT NULL, created timestamp with time zone not null default now(), foreign key (cell_id) references cell(id), foreign key (users_id) references users(id) ) CREATE TABLE rel_locationname_cell( id serial UNIQUE, locationname_id int NOT NULL, cell_id int NOT NULL, created timestamp with time zone not null default now(), foreign key (cell_id) references cell(id) ); CREATE TABLE cell( id serial UNIQUE , cellstring varchar NOT NULL UNIQUE, created timestamp with time zone not null default now() ); =cut