00001 <?php
00002
00006 class ImportXML {
00007 private $filename;
00008 private $dbh;
00009 private $prefix;
00010
00015 function __construct($filename)
00016 {
00017 $this->filename = $filename;
00018 $this->dbh = new DB_Mysql;
00019 $this->prefix = confGet('DB_TABLE_PREFIX');
00020 }
00021
00026 public function doImport($debug=false)
00027 {
00028 $data = implode("", file($this->filename));
00029 $parser = xml_parser_create();
00030 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
00031 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
00032 xml_parse_into_struct($parser, $data, $values, $tags);
00033 xml_parser_free($parser);
00034
00035 foreach ($tags as $key => $val) {
00036 if ("database" == $key) {
00037 $ranges = $val;
00038
00039 for ($i=0; $i < count($ranges); $i+=2) {
00040 $offset = $ranges[$i] + 1;
00041 $len = $ranges[$i + 1] - $offset;
00042
00043 if (true == $debug) {
00044 print_r($this->parseValues(array_slice($values, $offset, $len)));
00045 }
00046 }
00047 } else if ("person" == $key) {
00048 $ranges = $val;
00049
00050 for ($i=0; $i < count($ranges); $i+=2) {
00051 $offset = $ranges[$i] + 1;
00052 $len = $ranges[$i + 1] - $offset;
00053
00054 if (true == $debug) {
00055 print_r($this->parseValues(array_slice($values, $offset, $len)));
00056 } else {
00057 $tmp = new Person($this->parseValues(array_slice($values, $offset, $len)));
00058 $tmp->insert();
00059 }
00060 }
00061 } else if ("company" == $key) {
00062 $ranges = $val;
00063
00064 for ($i=0; $i < count($ranges); $i+=2) {
00065 $offset = $ranges[$i] + 1;
00066 $len = $ranges[$i + 1] - $offset;
00067
00068 if (true == $debug) {
00069 print_r($this->parseValues(array_slice($values, $offset, $len)));
00070 } else {
00071 $tmp = new Company($this->parseValues(array_slice($values, $offset, $len)));
00072 $tmp->insert();
00073 }
00074 }
00075 } else if ("project" == $key) {
00076 $ranges = $val;
00077
00078 for ($i=0; $i < count($ranges); $i+=2) {
00079 $offset = $ranges[$i] + 1;
00080 $len = $ranges[$i + 1] - $offset;
00081 $array = $this->parseValues(array_slice($values, $offset, $len));
00082
00083 $array['company'] = $this->query_id('company', $array['company_sql']);
00084
00085 unset($array['company_sql']);
00086
00087 if (true == $debug) {
00088 print_r($array);
00089 } else {
00090 $tmp = new Project($array);
00091 $tmp->insert();
00092 }
00093 }
00094 } else if ("projectperson" == $key) {
00095 $ranges = $val;
00096
00097 for ($i=0; $i < count($ranges); $i+=2) {;
00098 $offset = $ranges[$i] + 1;
00099 $len = $ranges[$i + 1] - $offset;
00100 $array = $this->parseValues(array_slice($values, $offset, $len));
00101
00102 $array['project'] = $this->query_id('project', $array['project_sql']);
00103 $array['person'] = $this->query_id('person', $array['person_sql']);
00104
00105 unset($array['project_sql']);
00106 unset($array['person_sql']);
00107
00108 if (true == $debug) {
00109 print_r($array);
00110 } else {
00111 $tmp = new ProjectPerson($array);
00112 $tmp->insert();
00113 }
00114 }
00115 } else if ("task" == $key) {
00116 $ranges = $val;
00117
00118 for ($i=0; $i < count($ranges); $i+=2) {
00119 $offset = $ranges[$i] + 1;
00120 $len = $ranges[$i + 1] - $offset;
00121
00122 $array = $this->parseValues(array_slice($values, $offset, $len));
00123
00124 if (true == $debug) {
00125 print_r($array);
00126 } else {
00127 $tmp = new Task($array);
00128 $tmp->insert();
00129 }
00130 }
00131 } else if ("taskperson" == $key) {
00132 $ranges = $val;
00133
00134 for ($i=0; $i < count($ranges); $i+=2) {
00135 $offset = $ranges[$i] + 1;
00136 $len = $ranges[$i + 1] - $offset;
00137 $array = $this->parseValues(array_slice($values, $offset, $len));
00138
00139 $array['task'] = $this->query_id('task', $array['task_sql']);
00140 $array['person'] = $this->query_id('person', $array['person_sql']);
00141
00142 unset($array['task_sql']);
00143 unset($array['person_sql']);
00144
00145 if (true == $debug) {
00146 print_r($array);
00147 } else {
00148 $tmp = new TaskPerson($array);
00149 $tmp->insert();
00150 }
00151 }
00152 } else if ("effort" == $key) {
00153 $ranges = $val;
00154
00155 for ($i=0; $i < count($ranges); $i+=2) {
00156 $offset = $ranges[$i] + 1;
00157 $len = $ranges[$i + 1] - $offset;
00158 $array = $this->parseValues(array_slice($values, $offset, $len));
00159
00160 $array['project'] = $this->query_id('project', $array['project_sql']);
00161 $array['task'] = $this->query_id('task', $array['task_sql']);
00162 $array['person'] = $this->query_id('person', $array['person_sql']);
00163
00164 unset($array['project_sql']);
00165 unset($array['task_sql']);
00166 unset($array['person_sql']);
00167
00168 if (true == $debug) {
00169 print_r($array);
00170 } else {
00171 $tmp = new Effort($array);
00172 $tmp->insert();
00173 }
00174 }
00175 } else {
00176 continue;
00177 }
00178 }
00179 }
00180
00184 private function parseValues($values)
00185 {
00186 for ($i=0; $i < count($values); $i++) {
00187 if (! isset($values[$i]["value"])) $values[$i]["value"] = '';
00188 $array[$values[$i]["tag"]] = $values[$i]["value"];
00189 }
00190 return $array;
00191 }
00192
00199 private function query_id($table, $cond)
00200 {
00201 if (! empty($cond)) {
00202 $sth = $this->dbh->prepare("SELECT id FROM {$this->prefix}{$table} WHERE {$cond}");
00203 $sth->execute();
00204 $tmp = $sth->fetch_assoc();
00205 if ($tmp)
00206 return $tmp['id'];
00207 else
00208 return '';
00209 } else {
00210 return '';
00211 }
00212 }
00213 }
00214
00215
00216 ?>
00217