_docs/_input/db/class_importXML.inc.php

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 

Generated on Sun Mar 4 17:19:27 2007 for streber by  doxygen 1.5.1-p1