· 9 years ago · Oct 30, 2016, 05:18 AM
1#!/usr/bin/perl -w
2
3use Cwd;
4use DBI;
5use strict;
6use warnings;
7
8# variables
9my $curr_dir = getcwd;
10my $post_uni_id = 0;
11my $comment_uni_id = 0;
12
13# handling arguments
14if (@ARGV != 1){
15 print ("correct usage: \nfsys_to-db [file system directory]\n");
16 exit;
17}
18my $directory = $ARGV[0];
19
20my $database = DBI->connect( "dbi:SQLite:data.dbl" ) || die "Cannot connect: $DBI::errstr";
21$database->do( "CREATE TABLE users ( 'zid', 'full_name', 'profile_pic', 'program', 'birthday', 'email', 'courses', 'mates', 'password', 'home_latitude', 'home_longitude', 'home_suburb' )" );
22$database->do( "CREATE TABLE posts ( 'post_id', 'from', 'message', 'time', 'latitude', 'longtitude' )" );
23$database->do( "CREATE TABLE comments ( 'post_id', 'comment_id', 'from', 'time', 'message', 'latitude', 'longtitude' )" );
24$database->do( "CREATE TABLE replies ( 'comment_id', 'from', 'time', 'message' )" );
25
26# port all user information from provided sources
27# looping through each user
28$directory = ($curr_dir . "/" . $directory);
29opendir (DIR, $directory) or die $!;
30my @dir = readdir DIR;
31foreach my $user (@dir) {
32 if ($user =~ /z\d{7}/) { # user id verification
33 my $filename = "$directory" . "$user" . "/" . "user.txt"; # processing user.txt
34 my %user_attr = ();
35 open(my $file, '<:encoding(UTF-8)', $filename) or die "Could not open file '$filename' $!";
36 while (my $line = <$file>) {
37 chomp $line;
38 my $attr = $line;
39 $attr =~ s/=.*$//;
40 my $val = $line;
41 $val =~ s/^.*=//;
42 $user_attr{$attr} = $val;
43 }
44 if ( ! exists $user_attr{home_suburb} ) { # Nullify unfilled feilds
45 $user_attr{home_suburb} = "NULL";
46 }
47 if ( ! exists $user_attr{home_longtitude} ) {
48 $user_attr{home_longtitude} = "NULL";
49 }
50 if ( ! exists $user_attr{home_latitude} ) {
51 $user_attr{home_latitude} = "NULL";
52 }
53 my $profile_link = "$directory" . "$user" . "/" . "profile.jpg"; # process profile picture
54 if ( -e $profile_link) {
55 $user_attr{profile_pic} = $profile_link;
56 } else {
57 $user_attr{profile_pic} = "NULL";
58 }
59 $database->do( "INSERT INTO users VALUES ( '$user_attr{zid}', '$user_attr{full_name}', '$user_attr{profile_pic}', '$user_attr{program}', '$user_attr{birthday}', '$user_attr{email}', '$user_attr{courses}', '$user_attr{mates}', '$user_attr{password}', '$user_attr{home_latitude}', '$user_attr{home_longtitude}', '$user_attr{home_suburb}' ) "); # add to user attributes to user table
60
61 # looping through the users posts
62 opendir (PST, "$directory" . "$user" . "/" . "posts") or die $!;
63 my @dir1 = readdir PST;
64 foreach my $user_post (@dir1) {
65 if ($user_post =~ /\d+/) { # verify post subfolder
66 my %post_attr = ();
67 my $filename_post = "$directory" . "$user" . "/" . "posts" . "/" . "$user_post" . "/" . "post.txt";
68 open(my $post, '<:encoding(UTF-8)', $filename_post ) or die "Could not open file '$filename' $!";
69 while (my $line = <$post>) {
70 chomp $line;
71 my $attr = $line;
72 $attr =~ s/=.*$//;
73 my $val = $line;
74 $val =~ s/^.*=//;
75 $post_attr{$attr} = $val;
76 }
77 if ( ! exists $post_attr{longtitude} ) {
78 $post_attr{longtitude} = "NULL";
79 }
80 if ( ! exists $post_attr{latitude} ) {
81 $post_attr{latitude} = "NULL";
82 }
83 $post_attr{post_id} = $post_uni_id;
84 print ("'$post_attr{post_id}',\n'$post_attr{from}', \n'$post_attr{message}',\n '$post_attr{time}', \n '$post_attr{latitude}',\n '$post_attr{longtitude}'", "\n");
85 #$database->do( "CREATE TABLE posts ( 'post_id', 'from', 'message', 'time', 'latitude', 'longtitude' )" );
86 $database->do( "INSERT INTO posts VALUES ( '$post_attr{post_id}', '$post_attr{from}', '$post_attr{message}', '$post_attr{time}', '$post_attr{latitude}', '$post_attr{longtitude}' ) ");
87
88 }
89 $post_uni_id ++;
90 }
91 closedir PST;
92 }
93}
94closedir DIR;
95$database->disconnect;