1 # @tag: cp_greeting_migration
2 # @description: Migration of cp_greeting to cp_gender
3 # @depends: generic_translations
7 die("This script cannot be run from the command line.") unless ($main::form);
9 # import vars from caller
10 our ($dbup_locale, $dbup_myconfig, $dbh, $iconv);
14 die($dbup_locale->text("Database update error:") .
15 "<br>$msg<br>" . $DBI::errstr);
19 my ($query, $may_fail) = @_;
21 if (!$dbh->do($query)) {
22 mydberror($query) unless ($may_fail);
31 # list of all entries where cp_greeting is empty, meaning can't determine gender from parsing Herr/Frau/...
32 # this assumes cp_greeting still exists, i.e. gender.sql was not run yet
33 my ($gender_table, $mchecked, $fchecked);
35 my $sql2 = "select cp_id,cp_givenname,cp_name,cp_title,cp_greeting from contacts where not (cp_greeting ILIKE '%frau%' OR cp_greeting ILIKE '%herr%' or cp_greeting ILIKE '%mrs.%' or cp_greeting ILIKE '%miss%') ";
36 my $sth2 = $dbh->prepare($sql2) or die $dbh->errstr();
37 $sth2->execute() or die $dbh->errstr();
40 $gender_table .= '<table border="1"><tr><th>cp_givenname</th><th>cp_name</th><th>cp_title</th><th>cp_greeting</th><th><translate>male/female</th></tr>';
41 $gender_table .= "\n";
43 while (my $row = $sth2->fetchrow_hashref()) {
44 if ($main::form->{"gender_$i"} eq "f" ) {
46 $fchecked = "checked";
48 $mchecked = "checked";
52 $gender_table .= "<tr><input type=hidden name=\"cp_id_$i\" value=\"$row->{cp_id}\"> <td>$row->{cp_givenname}</td> <td>$row->{cp_name}</td> <td>$row->{cp_title} </td> <td>$row->{cp_greeting} </td><td> <input type=\"radio\" name=\"gender_$i\" value=\"m\" $mchecked> <input type=\"radio\" name=\"gender_$i\" value=\"f\" $fchecked></td></tr>\n";
56 $gender_table .= "<input type=hidden name=\"number_of_gender_entries\" value=\"$i\">";
57 $gender_table .= "</table>";
59 $main::form->{gender_table} = $gender_table;
63 my $sql3 = "select cp_id,cp_givenname,cp_name,cp_title,cp_greeting from contacts where not ( (cp_greeting ILIKE '%frau%' OR cp_greeting ILIKE '%herr%' or cp_greeting ILIKE '%mrs.%' or cp_greeting ILIKE '%miss%')) and not (cp_greeting like ''); ";
65 my $sth3 = $dbh->prepare($sql3) or die $dbh->errstr();
66 $sth3->execute() or die $dbh->errstr();
68 $title_table = '<table border="1"><tr><th>cp_givenname</th><th>cp_name</th><th>cp_title</th><th>cp_greeting</th><th>cp_title new</th></tr>';
71 while (my $row = $sth3->fetchrow_hashref()) {
72 # Vorschlagsfeld fuer neuen Titel mit Werten von cp_greeting und cp_title vorbelegen
73 my $value = "$row->{cp_greeting}";
74 $value .= " " if $row->{cp_greeting};
75 $value .= "$row->{cp_title}";
77 $title_table .= "<tr> <td><input type=hidden name=\"cp_id_title_$j\" value=$row->{cp_id}> $row->{cp_givenname}</td> <td>$row->{cp_name}</td><td>$row->{cp_title}</td> <td>$row->{cp_greeting}</td><td><input type=\"text\" id=\"cp_title_$j\" name=\"cp_name_$j\" value=\"$value\"></td> </tr>\n";
81 $title_table .= "<input type=hidden name=\"number_of_title_entries\" value=\"$j\">";
82 $title_table .= "</table>";
83 $main::form->{title_table} = $title_table;
91 # parse html form in /templates/webpages/dbupgrade/cp_greeting_update_form
92 print $main::form->parse_html_template("dbupgrade/cp_greeting_update_form");
98 # first of all check if gender.sql was already run and thus cp_gender exists
99 # if it exists there is no need for this update anymore, so return
100 # without doing anything
102 my $column_exists = 1;
103 if (!$dbh->do("SELECT cp_gender FROM contacts LIMIT 1")) {
108 return 1 if $column_exists;
111 if (!$main::form->{do_migrate}) {
112 # case 1: first call of page
113 set_default_greetings();
117 # case 2: submit button was pressed, hidden field do_migrate was set
128 ALTER TABLE contacts ADD COLUMN cp_gender char(1);
129 UPDATE contacts SET cp_gender = 'm';
130 UPDATE contacts SET cp_gender = 'f'
131 WHERE (cp_greeting ILIKE '%frau%')
132 OR (cp_greeting ILIKE '%mrs.%')
133 OR (cp_greeting ILIKE '%miss%');
137 for (my $i = 1; $i <= $main::form->{number_of_gender_entries}; $i++ ) {
138 next unless $main::form->{"cp_id_$i"};
139 if ( $main::form->{"gender_$i"} eq "f" ) {
140 $sqlcode .= "UPDATE contacts SET cp_gender = \'f\' WHERE cp_id = $main::form->{\"cp_id_$i\"};\n";
144 for (my $i = 1; $i <= $main::form->{number_of_title_entries}; $i++ ) {
145 next unless $main::form->{"cp_id_title_$i"} and $main::form->{"cp_id_$i"};
146 $sqlcode .= "UPDATE contacts SET cp_title = \'$main::form->{\"cp_name_$i\"}\' WHERE cp_id = $main::form->{\"cp_id_$i\"};\n";
148 $sqlcode .= "ALTER TABLE contacts DROP COLUMN cp_greeting;";
150 # insert chosen default values
151 $sqlcode .= "INSERT INTO generic_translations (translation_type, translation) VALUES ('greetings::male','$main::form->{default_male}');";
152 $sqlcode .= "INSERT INTO generic_translations (translation_type, translation) VALUES ('greetings::female','$main::form->{default_female}');";
154 my $query = $sqlcode;
160 sub set_default_greetings {
161 # add html input boxes to template so user can specify default greetings
163 my $default_male = "Herr";
164 my $default_female = "Frau";
166 my $default_greeting_text_male = "<input type=\"text\" id=\"default_male\" name=\"default_male\" value=\"$default_male\"><br>";
167 my $default_greeting_text_female = "<input type=\"text\" id=\"default_female\" name=\"default_female\" value=\"$default_female\"><br>";
168 $main::form->{default_greeting_text_male} = $default_greeting_text_male;
169 $main::form->{default_greeting_text_female} = $default_greeting_text_female;