#!/usr/bin/perl # TODO : add a test for the filename $filename=$ARGV[0]; $dir = $filename; $dir =~ s#[^/]*$##; $db="linuxman"; use Pg; # Connect to the linuxman database $conn = Pg::connectdb("dbname=$db"); die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status; print "connected to $db\n"; open(FD, "<$filename") or die "can not open $filename"; $_=; /(\d{4})(\d{2})(\d{2})-(\d+)/; $year=$1; $month=$2; $day=$3; $numero=$4; $_=; s/\s+$//g; s/^\s+//g; s/\s*,\s*/,/g; s/'/\\'/g; @keywords = split (',',$_); $_=; s/\s+$//g; s/^\s+//g; s/\s*,\s*/,/g; s/'/\\'/g; @attachments = split (',',$_); $result = $conn->exec("SELECT num FROM articles WHERE year = '$year' AND month = '$month' AND day = '$day' GROUP BY num"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; $num = $result->ntuples+1; if ($num!=$numero) { print "Warning : given num ($numero) and the calculated one ($num) are different, continue (y/n) ? "; if (lc(getc)=='n'){ exit(0); } } print "Creating $year$month$day-$num entry\n"; print "Keywords : @keywords\nAttachments : @attachments\n"; while () { encode(); $line="$line$_"; } print TMP $line; $result = $conn->exec("BEGIN"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; $oid = $conn->lo_creat(0644) or die $conn->errorMessage; $ofd = $conn->lo_open($oid,0644); die $conn->errorMessage if $ofd==-1; $len = length($line); print "Creating article $oid, length $len\n"; die $conn->errorMessage unless $conn->lo_write($ofd,$line,$len) == $len; $result = $conn->exec("END"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; for ($i = 0; $i<@keywords;$i++){ $result = $conn->exec("INSERT INTO articles VALUES ('$year','$month','$day','$num','$keywords[$i]','$oid')"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; } # Creating an entry for attachments for ($i=0;$i<@attachments;$i++){ $result = $conn->exec("BEGIN"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; $oid = $conn->lo_import("$dir$attachments[$i]") or die $conn->errorMessage; $result = $conn->exec("END"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; print "Adding entry for attachments $attachments[$i]\n"; $result = $conn->exec("INSERT INTO attachments VALUES ('$year','$month','$day','$num','$attachments[$i]','$oid')"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; } exit(0); sub encode { s/(\s| )\s/  /g; s/é/é/g; s/É/É/g; s/è/è/g; s/È/È/g; s/ê/ê/g; s/Ê/Ê/g; s/ë/ë/g; s/Ë/Ë/g; s/à/à/g; s/À/À/g; s/â/â/g; s/Â/Â/g; s/ä/ä/g; s/Ä/Ä/g; s/ù/ù/g; s/Ù/Ù/g; s/û/û/g; s/Û/Û/g; s/ü/ü/g; s/Ü/Ü/g; s/ô/ô/g; s/Ô/Ô/g; s/ö/ö/g; s/Ö/Ö/g; s/ï/ï/g; s/Ï/Ï/g; s/î/î/g; s/Î/Î/g; s/ç/ç/g; s/Ç/Ç/g; s/£/£/g; return $_; }