redact
[contractdashboard.git] / admin / partialdata / import.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php
if (php_sapi_name() == "cli") {
    include_once ("../../lib/common.inc.php");
function processFile($fpath, $tablename)
{
        global $conn;
        echo " ============== $fpath  ============== <br>";
        flush();
        $row = 1;
        $success = 0;
        $dupes = 0;
        $handle = fopen($fpath, "r");
        //"t" mode string translates windows line breaks to unix
        $datamapping0507 = array(
 
                "Agency" => "agencyName",
                "CN ID" => "CNID",
                "Publish Date" => "publishDate",
                "Contract Start Date" => "contractStart",
                "Contract End Date" => "contractEnd",
                "Value (AUD)" => "value",
                "Title" => "description",
                "Category" => "category",
                "ATM ID" => "atmID",
                "Supplier Name" => "supplierName",
                "LastUpdated" => "amendDate",
                "" => ""
        );
        $headers;
        $contractNoticeFields = array(
                "importFile",
                "CNID",
                "description",
                "agencyName",
                "publishDate",
                "category",
                "contractStart",
                "contractEnd",
                "value",
                "atmID",
                "supplierName",
                "amendDate"
        );
        if ($tablename == "contractnotice") {
                $contractNoticeInsertQ = 'INSERT INTO contractnotice ("' . implode('" , "', $contractNoticeFields) . '") VALUES ( ';
                foreach ($contractNoticeFields as $key => $f) {
                        $contractNoticeInsertQ.= ($key == 0 ? "" : ", ") . "?";
                }
                $contractNoticeInsertQ.= ");";
                $contractNoticeInsertQ = $conn->prepare($contractNoticeInsertQ);
        }
        
        while (($data = fgetcsv($handle, 1000, "\t")) !== false) {
                $num = count($data);
                if ($row == 3) {
                        $headers = $data;
                }
                elseif ($row > 3) {
                        if ($num > count($datamapping0507)) {
                                die("<font color=red>Error in data import; data mapping fields out of bounds or changed</font><br>" . $fname . "data:" .$num. print_r($data ,true). "mapping:" . count($datamapping0507). print_r($datamapping0507 ,true));
                        }
                        $contractNoticeInsert = Array();
                        $contractNoticeInsert[] = $fpath;
                        $keys = array_keys($datamapping0507);
                        for ($c = 0; $c < $num; $c++) {
                                $data[$c] = trim($data[$c], "=");
                                $data[$c] = trim($data[$c], "\"");
                                if ($tablename == "contractnotice") {
                                        if (in_array(($datamapping0507[$headers[$c]]) , $contractNoticeFields)) {
                                                if (($datamapping0507[$headers[$c]]) == "parentCN" || ($datamapping0507[$headers[$c]]) == "CNID") {
                                                        $data[$c] = substr($data[$c], 2); // take off the "CN" prefix
                                                        if (!is_numeric($data[$c]) && $data[$c] != "") die($data[$c] . " is not numeric");
                                                        if ($data[$c] > 0) {
                                                                $contractNoticeInsert[] = $data[$c];
                                                        }
                                                        else {
                                                                $contractNoticeInsert[] = 0;
                                                        }
                                                }
                                                elseif (($datamapping0507[$headers[$c]]) == "supplierABN") {
                                                        if ($data[$c] > 0) {
                                                                $contractNoticeInsert[] = $data[$c];
                                                        }
                                                        else {
                                                                $contractNoticeInsert[] = null;
                                                        }
                                                }
                                                elseif (($datamapping0507[$headers[$c]]) == "amendDate" || ($datamapping0507[$headers[$c]]) == "publishDate" || ($datamapping0507[$headers[$c]]) == "contractStart" || ($datamapping0507[$headers[$c]]) == "contractEnd") {
                                                        $contractNoticeInsert[] = date('Y-m-d H:i:s', strtotime($data[$c]));
                                                }
                                                else {
                                                        if (strstr("\" =", $data[$c] > 0)) {
                                                                die("Invalid Description field" . $contractNoticeInsert);
                                                        }
$colvalue =  preg_replace( '/[^[:print:]]/', '',utf8_encode( $data[$c]));
 
                                                        $contractNoticeInsert[] = $colvalue;
                                                }
                                        }
                                }
                        }
                        flush();
                        if ($tablename == "contractnotice") {
                                $contractNoticeInsertQ->execute($contractNoticeInsert);
                                $errors = $conn->errorInfo();
                                if ($errors[1] == 7 && strpos($errors[2], "duplicate key")) {
                                        $dupes++;
                                }
                                elseif ($errors[1] == 0) {
                                        $success++;
                                }
                                else {
                                        foreach ($contractNoticeFields as $key => $cnf) {
                                                echo var_dump($contractNoticeInsert[$key]) . $cnf . "<br>";
                                        }
                                        echo $data[2] . " failed CN insert.<br>" . print_r($errors, true) . "<br> row $row <br><br>\n";
                                }
                        }
                        flush();
                        //echo "<hr>\n";
                        
                }
                $row++;
        }
        fclose($handle);
        echo " $dupes duplicate records<br>";
                echo " $success records successfully created<br>";
        flush();
        return $success;
}
$path = './';
if ($_REQUEST["fname"] == "") {
        echo "Get files from: https://www.tenders.gov.au/?event=public.reports.list<br>";
        $dhandle = opendir($path);
        // define an array to hold the files
        $files = array();
        if ($dhandle) {
                // loop through all of the files
                while (false !== ($fname = readdir($dhandle))) {
                        if (($fname != '.') && ($fname != '..') && (!isset($_REQUEST["filter"]) || strpos($fname,$_REQUEST["filter"]) != false)) {
                                echo "<a href=\"importdatagov.php?fname=$fname\">$fname</a>&nbsp;" . filesize($path . $fname) . "&nbsp;" . date("c", filemtime($path . $fname)) . "<br/>";
                                processFile($path . $fname, "contractnotice");
                        }
                }
        }
}
else {
        $success = 0;
        $fname = $_REQUEST["fname"];
        
        $success+= processFile($path . $fname, "contractnotice");
 
}
}
?>