00001 <?php
00002
00007 abstract class ExportXML
00008 {
00015 function field($name, $array) {
00016 $xml = "\t<".$name.">\n";
00017 foreach ($array as $key => $value) {
00018
00019
00020 $value = utf8_encode($value);
00021 $value = htmlspecialchars($value);
00022
00023 $xml .= "\t\t<".$key.">".$value."</".$key.">\n";
00024 }
00025 $xml .= "\t</".$name.">\n";
00026 return $xml;
00027 }
00028
00033 abstract function doExport();
00034 }
00035
00039 class NetOfficeExport extends ExportXML
00040 {
00041 var $dbh;
00042 var $prefix;
00043 var $streber_ver = '0.048';
00044 var $person_keys;
00045 var $company_keys;
00046 var $project_keys;
00047 var $task_keys;
00048
00049 function NetOfficeExport($dbres, $prefix) {
00050 $this->dbh = $dbres;
00051 $this->prefix = $prefix;
00052 $this->person_keys = array( 'nickname',
00053 'password',
00054 'name',
00055 'office_email',
00056 'personal_email',
00057 'office_phone',
00058 'personal_phone',
00059 'mobile_phone',
00060 'office_fax',
00061 'comments',
00062 'profile');
00063
00064 $this->company_keys = array('name',
00065 'street',
00066 'zipcode',
00067 'phone',
00068 'fax',
00069 'homepage',
00070 'email',
00071 'comments');
00072
00073 $this->project_keys = array('prio',
00074 'status',
00075 'name',
00076 'description');
00077
00078 $this->task_keys = array( 'prio',
00079 'status',
00080 'name',
00081 'description',
00082 'date_start',
00083 'date_closed');
00084
00085 }
00086
00087 function doExport() {
00088 $xml = "<streber>\n";
00089 $xml .= $this->xml_version();
00090 $xml .= $this->xml_person();
00091 $xml .= $this->xml_company();
00092 $xml .= $this->xml_project();
00093 $xml .= $this->xml_projectperson();
00094 $xml .= $this->xml_task();
00095 $xml .= $this->xml_taskperson();
00096 $xml .= $this->xml_effort();
00097 $xml .= "</streber>\n";
00098 return $xml;
00099 }
00100
00101 function xml_version() {
00102 return parent::field('database', array('version' => $this->streber_ver));
00103 }
00104
00105 function xml_person() {
00106 $query = "SELECT * FROM {$this->prefix}members";
00107 $result = mysql_query($query, $this->dbh);
00108
00109 $xml = '';
00110 while ($row = mysql_fetch_assoc($result)) {
00111
00112 if ( "1" != $row['id']) {
00113 $xml .= parent::field('person', array(
00114
00115
00116 'nickname' => $row['login'],
00117 'password' => $row['password'],
00118 'name' => $row['name'],
00119
00120 'office_email' => $row['email_work'],
00121 'personal_email'=> $row['email_home'],
00122 'office_phone' => $row['phone_work'],
00123 'personal_phone'=> $row['phone_home'],
00124 'mobile_phone' => $row['mobile'],
00125 'office_fax' => $row['fax'],
00126 'comments' => $row['comments'],
00127 'profile' => $row['profil'],
00128
00129
00130
00131
00132 'can_login' => '1'));
00133 }
00134 }
00135 return $xml;
00136 }
00137
00138 function xml_company() {
00139 $query = "SELECT * FROM {$this->prefix}organizations";
00140 $result = mysql_query($query, $this->dbh);
00141
00142 $xml = '';
00143 while ($row = mysql_fetch_assoc($result)) {
00144 $xml .= parent::field('company', array(
00145
00146 'name' => $row['name'],
00147 'street' => $row['address1'],
00148
00149 'zipcode' => $row['zip_code'],
00150
00151
00152 'phone' => $row['phone'],
00153 'fax' => $row['fax'],
00154 'homepage' => $row['url'],
00155 'email' => $row['email'],
00156 'comments' => $row['comments']
00157
00158
00159
00160 ));
00161 }
00162 return $xml;
00163 }
00164
00165 function xml_project() {
00166 $query = "SELECT * FROM {$this->prefix}projects";
00167 $result = mysql_query($query, $this->dbh);
00168
00169 $xml = '';
00170 while ($row = mysql_fetch_assoc($result)) {
00171 $company_sql = $this->sql_company_query($row['organization']);
00172
00173 $xml .= parent::field('project', array(
00174
00175 'company_sql' => $company_sql,
00176
00177 'prio' => $row['priority'],
00178 'status' => $row['status'],
00179 'name' => $row['name'],
00180 'description' => $row['description'],
00181
00182
00183
00184
00185
00186
00187
00188
00189 ));
00190 }
00191 return $xml;
00192 }
00193
00194 function xml_projectperson() {
00195 $query = "SELECT * FROM {$this->prefix}teams";
00196 $result = mysql_query($query, $this->dbh);
00197
00198 $xml = '';
00199 while ($row = mysql_fetch_assoc($result)) {
00200 $person_sql = $this->sql_person_query($row['member']);
00201 $project_sql = $this->sql_project_query($row['project']);
00202
00203 $xml .= parent::field('projectperson', array(
00204
00205 'project_sql' => $project_sql,
00206 'person_sql' => $person_sql
00207 ));
00208 }
00209 return $xml;
00210 }
00211
00212 function xml_task() {
00213 $query = "SELECT * FROM {$this->prefix}tasks";
00214 $result = mysql_query($query, $this->dbh);
00215
00216 $xml = '';
00217 while ($row = mysql_fetch_assoc($result)) {
00218 $xml .= parent::field('task', array(
00219 'prio' => $row['priority'],
00220 'status' => $row['status'],
00221 'name' => $row['name'],
00222
00223 'description' => $row['description'],
00224 'date_start' => $row['start_date'],
00225 'date_closed' => $row['due_date']
00226 ));
00227 }
00228 return $xml;
00229 }
00230
00231 function xml_taskperson() {
00232 $query = "SELECT id, assigned_to, comments FROM {$this->prefix}tasks";
00233 $result = mysql_query($query, $this->dbh);
00234
00235 $xml = '';
00236 while ($row = mysql_fetch_assoc($result)) {
00237 $person_sql = $this->sql_person_query($row['assigned_to']);
00238 $task_sql = $this->sql_task_query($row['id']);
00239
00240 $xml .= parent::field('taskperson', array(
00241 'person_sql' => $person_sql,
00242 'task_sql' => $task_sql,
00243 'comment' => $row['comments']
00244 ));
00245
00246 }
00247 return $xml;
00248 }
00249
00250 function xml_effort() {
00251 $query = "SELECT * FROM {$this->prefix}tasks_time";
00252 $result = mysql_query($query, $this->dbh);
00253
00254 $xml = '';
00255 while ($row = mysql_fetch_assoc($result)) {
00256 $project_sql = $this->sql_project_query($row['project']);
00257 $task_sql = $this->sql_task_query($row['task']);
00258 $person_sql = $this->sql_person_query($row['owner']);
00259
00260 $t = strtotime($row['created'])-($row['hours']*60*60);
00261 $time_start = date("Y-m-d H:i", $t);
00262 $xml .= parent::field('effort', array(
00263 'project_sql' => $project_sql,
00264 'task_sql' => $task_sql,
00265 'person_sql' => $person_sql,
00266 'time_start' => $time_start,
00267 'time_end' => $row['created']
00268
00269 ));
00270
00271 }
00272 return $xml;
00273 }
00274
00275 function array_combine( $keys, $vals ) {
00276 $keys = array_values( (array) $keys );
00277 $vals = array_values( (array) $vals );
00278 $n = max( count( $keys ), count( $vals ) );
00279 $r = array();
00280
00281 for( $i=0; $i<$n; $i++ ) {
00282 $r[ $keys[$i] ] = $vals[$i];
00283 }
00284 return $r;
00285 }
00286
00287 function sql_company_query($id) {
00288 $company = mysql_query("SELECT name, address1, zip_code, phone, fax, url, email, comments FROM {$this->prefix}organizations WHERE id = '{$id}'", $this->dbh);
00289
00290 $company_sql = '';
00291 if ($company) {
00292 $res = mysql_fetch_assoc($company);
00293 $company_values = array(addslashes($res['name']),
00294 addslashes($res['address1']),
00295 addslashes($res['zip_code']),
00296 addslashes($res['phone']),
00297 addslashes($res['fax']),
00298 addslashes($res['url']),
00299 addslashes($res['email']),
00300 addslashes($res['comments']));
00301
00302 $arr = $this->array_combine($this->company_keys, $company_values);
00303 $i = 0;
00304 foreach ($arr as $key => $val) {
00305 $company_sql .= $key." = '".$val."'";
00306 if ($i++ < count($arr) - 1) $company_sql .= " AND ";
00307 }
00308 }
00309 return $company_sql;
00310 }
00311
00312 function sql_person_query($id) {
00313 $person = mysql_query("SELECT login, password, name, email_work, email_home, phone_work, phone_home, mobile, fax, comments, profil FROM {$this->prefix}members WHERE id = '{$id}'", $this->dbh);
00314
00315 $person_sql = '';
00316 if ($person) {
00317 $res = mysql_fetch_assoc($person);
00318 $person_values = array( addslashes($res['login']),
00319 addslashes($res['password']),
00320 addslashes($res['name']),
00321 addslashes($res['email_work']),
00322 addslashes($res['email_home']),
00323 addslashes($res['phone_work']),
00324 addslashes($res['phone_home']),
00325 addslashes($res['mobile']),
00326 addslashes($res['fax']),
00327 addslashes($res['comments']),
00328 addslashes($res['profil']));
00329
00330 if ($res['login'] == "admin") {
00331 $person_sql = "nickname = 'admin'";
00332 } else {
00333 $arr = $this->array_combine($this->person_keys, $person_values);
00334 $i = 0;
00335 foreach ($arr as $key => $val) {
00336 $person_sql .= $key." = '".$val."'";
00337 if ($i++ < count($arr) - 1) $person_sql .= " AND ";
00338 }
00339 }
00340 }
00341 return $person_sql;
00342 }
00343
00344 function sql_project_query($id) {
00345 $project = mysql_query("SELECT priority, status, name, description FROM {$this->prefix}projects WHERE id = '{$id}'", $this->dbh);
00346
00347 $project_sql = '';
00348 if ($project) {
00349 $res = mysql_fetch_assoc($project);
00350 $project_values = array(addslashes($res['priority']),
00351 addslashes($res['status']),
00352 addslashes($res['name']),
00353 addslashes($res['description']));
00354
00355 $arr = $this->array_combine($this->project_keys, $project_values);
00356 $i = 0;
00357 foreach ($arr as $key => $val) {
00358 $project_sql .= $key." = '".$val."'";
00359 if ($i++ < count($arr) - 1) $project_sql .= " AND ";
00360 }
00361 }
00362 return $project_sql;
00363 }
00364
00365 function sql_task_query($id) {
00366 $task = mysql_query("SELECT priority, status, name, description, start_date, due_date FROM {$this->prefix}tasks WHERE id = '{$id}'", $this->dbh);
00367
00368 $task_sql = '';
00369 if ($task) {
00370 $res = mysql_fetch_assoc($task);
00371
00372 if ($res['start_date'] == "--") $res['start_date'] = "0000-00-00";
00373 if ($res['due_date'] == "--") $res['due_date'] = "0000-00-00";
00374
00375 $task_values = array( addslashes($res['priority']),
00376 addslashes($res['status']),
00377 addslashes($res['name']),
00378 addslashes($res['description']),
00379 addslashes($res['start_date']),
00380 addslashes($res['due_date']));
00381
00382 $arr = $this->array_combine($this->task_keys, $task_values);
00383 $i = 0;
00384 foreach ($arr as $key => $val) {
00385 $task_sql .= $key." = '".$val."'";
00386 if ($i++ < count($arr) - 1) $task_sql .= " AND ";
00387 }
00388 }
00389 return $task_sql;
00390 }
00391 }
00392 ?>