Ticket #283: add_pilots_safe.php

File add_pilots_safe.php, 6.2 KB (added by Joerg Ewald, 7 years ago)
Line 
1<?php
2        /* USAGE: >php add_pilots.php ".\2014\comp.fsdb"
3           Creates new FSDB 'test.fsdb' in current directory
4           Make sure to enable openssl extension in php.ini
5         */
6        $fsdb_filepath = $argv[1];
7        if (!isset($fsdb_filepath)){
8                print "The first argument must be the name of the FSDB file to add pilots to\r\n";
9                exit;
10        }
11       
12        if (!file_exists($fsdb_filepath)){
13                print "Could not find FSDB file $fsdb_filepath\r\n";
14                exit;
15        }               
16       
17        //rss->channel->item[0]->description=xxx: foo,...
18        $xml_pilot_list = 'https://spreadsheets.google.com/feeds/list/<ID>/od6/public/basic?alt=rss'; #TODO replace <ID> with id of document
19        $pilot_hash = array();
20        $pilot_list = simplexml_load_file($xml_pilot_list);     
21       
22        //Create Hash of pilots found
23        $VALUES_TO_FIND = 7;
24        $processed_count = 0;
25        for ($i = 0; $i < count($pilot_list->channel->item); ++$i) {
26                $pilot = $pilot_list->channel->item[$i]->description;   
27                $pilot_array = explode(", ", $pilot);
28                $values_found = 0;             
29                $timestamp = "";
30                $name = "";
31                $glider_class = "";
32                $glider_colors = "";
33                $wing = "";             
34                $nation = "";
35                $rating = "";
36                foreach ($pilot_array as $name_value){
37                        $lookup_array = explode(": ", $name_value);
38                        if ($lookup_array[0] == "timestamp"){
39                                $timestamp = $lookup_array[1];
40                                $values_found++;
41                        } elseif ($lookup_array[0] == "firstandlastname"){
42                                $name = $lookup_array[1];
43                                $values_found++;
44                        } elseif ($lookup_array[0] == "pilotrating"){
45                                $rating = $lookup_array[1];
46                                $values_found++;
47                        } elseif ($lookup_array[0] == "glidermakemodel"){
48                                $wing = $lookup_array[1];
49                                $values_found++;
50                        } elseif ($lookup_array[0] == "gliderratingenrating"){
51                                $glider_class = $lookup_array[1];
52                                $values_found++;                       
53                        } elseif ($lookup_array[0] == "glidercolors"){
54                                $glider_colors = $lookup_array[1];
55                                $values_found++;                       
56                        } elseif ($lookup_array[0] == "nationality"){
57                                $nation = $lookup_array[1];
58                                $values_found++;
59                        } 
60                       
61                        //just trying to speed this up
62                        if ($values_found == $VALUES_TO_FIND) {
63                                break;
64                        }
65                }
66                $pilot_hash[$name] = array (
67                        "name" => $name,
68                        "timestamp" => $timestamp,
69                        "rating" => $rating,
70                        "nationality" => $nation,
71                        "glider" => $wing,
72                        "glider_color" => $glider_colors,
73                        "glider_class" => $glider_class,
74                );     
75                $processed_count++;     
76        }
77        print("Found $processed_count pilots to process from the web form\r\n");
78       
79        $fsdb_xml = simplexml_load_file($fsdb_filepath);
80        $xml_pilot_list = array();
81        $pilots_node = $fsdb_xml->FsCompetition[0]->FsParticipants[0];
82        $max_id = 0;
83        foreach($pilots_node as $pilot){
84                $tmp_name = $pilot['name'];
85                $tmp_id = $pilot['id'];
86                print($tmp_name . "\r\n");
87                $xml_pilot_list[(string)$tmp_name] = array(
88                        "name" => $tmp_name,
89                        "id" => $tmp_id,
90                );
91                if ($max_id < $tmp_id ){
92                        $max_id = $tmp_id ; 
93                }
94        }
95       
96        if ($max_id == 0){
97                $max_id = 199;
98        }
99       
100        $pilots_added_count = 0;
101        foreach ($pilot_hash as $pilot_to_add){
102                if (!array_key_exists($pilot_to_add["name"], $xml_pilot_list)){
103                        print("Adding pilot " . $pilot_to_add["name"] . "\n");
104                        $participant_node = $fsdb_xml->FsCompetition[0]->FsParticipants[0]->addChild("FsParticipant");
105                        $participant_node->addAttribute("id", ++$max_id);
106                        $participant_node->addAttribute("name", $pilot_to_add["name"]);
107                        $participant_node->addAttribute("glider", $pilot_to_add["glider"]);
108                        $participant_node->addAttribute("glider_main_colors", "");
109                        $participant_node->addAttribute("birthday", "");
110                        $participant_node->addAttribute("fai_licence", "");
111                        $participant_node->addAttribute("female", "0");
112                        $participant_node->addAttribute("nat_code_3166_a3", "USA");
113                        $participant_node->addAttribute("sponsor", "");
114                        $participant_node->addAttribute("CIVLID", "");
115                        $custom_attribs_node = $participant_node->addChild("FsCustomAttributes");
116                        $rating_node = $custom_attribs_node->addChild("Rating");
117                        $rating_node->AddAttribute("name", "Rating");
118                        $rating_node->AddAttribute("value", $pilot_to_add["rating"]);
119                        $wing_rating = $custom_attribs_node->addChild("Category");
120                        $wing_rating->AddAttribute("name", "Category");
121                        $wing_rating->AddAttribute("value", $pilot_to_add["glider_class"]);                     
122                        $pilots_added_count++;
123                }
124        }
125        print("Added $pilots_added_count to database\r\n");
126       
127        print("Writing out new fsdb to test.fsdb\r\n");
128        $fsdb_xml->asXML("test.fsdb");
129        print("Done\n");
130       
131/*
132                  <tr class="<?php echo $bottom_class; ?>">
133                        <td width="182" class="table_cell"><?php echo $pilot['name']; ?></td>
134                        <td width="51" class="table_cell"><?php echo $pilot->FsCustomAttributes[0]->FsCustomAttribute[0]['value']; ?></td>
135                        <td width="143" class="table_cell"><?php echo $pilot['glider']; ?></td>
136                        <td width="55" class="table_cell"><?php echo $pilot->FsCustomAttributes->FsCustomAttribute[1]['value']; ?></td>
137                        <td width="37" class="table_cell" style="text-align:right;"><?php echo $pilot['id']; ?></td>
138                        <td width="37" class="table_cell">&nbsp;</td>
139                  </tr>         
140                 
141<?xml version="1.0" encoding="utf-8"?>
142<Fs version="3.4" comment="Supports only a single Fs element in a .fsdb file which must be the root element.">
143  <FsCompetition id="0" name="SoCal XC League 2013" location="Southern California, USA" from="2013-03-14" to="2013-10-14" utc_offset="-7">
144    <FsScoreFormula id="GAP2011" use_distance_points="1" use_time_points="1" use_departure_points="0" use_leading_points="1" use_arrival_position_points="0" use_arrival_time_points="0" min_dist="5" nom_dist="10" nom_time="0.75" nom_goal="0.3" day_quality="0" time_points_if_not_in_goal="0" jump_the_gun_factor="0" use_1000_points_for_max_day_quality="0" normalize_1000_before_day_quality="0" time_validity_based_on_pilot_with_speed_rank="1" bonus_gr="2" no_pilots_in_goal_factor="1" task_stopped_factor="1" />
145    <FsCompetitionNotes><![CDATA[]]></FsCompetitionNotes>
146    <FsParticipants>
147      <FsParticipant id="201" name="Aaron Price" birthday="" glider="Skywalk Poison 3" glider_main_colors="" fai_licence="" female="0" nat_code_3166_a3="CAN" sponsor="" CIVLID="">
148        <FsCustomAttributes>
149          <FsCustomAttribute name="Rating" value="P4" />
150          <FsCustomAttribute name="Category" value="Serial" />
151        </FsCustomAttributes>
152      </FsParticipant>
153                ...
154         <FsParticipants>
155         ...
156  </FsCompetition>
157</Fs>
158*/     
159?>