koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] CVS: koha/updater updatedatabase,1.117,1.118


From: Paul POULAIN
Subject: [Koha-cvs] CVS: koha/updater updatedatabase,1.117,1.118
Date: Thu, 04 Aug 2005 09:02:57 -0700

Update of /cvsroot/koha/koha/updater
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12155/updater

Modified Files:
        updatedatabase 
Log Message:
oops... error in synch between 2.2 and head

Index: updatedatabase
===================================================================
RCS file: /cvsroot/koha/koha/updater/updatedatabase,v
retrieving revision 1.117
retrieving revision 1.118
diff -C2 -r1.117 -r1.118
*** updatedatabase      4 Aug 2005 14:24:39 -0000       1.117
--- updatedatabase      4 Aug 2005 16:02:55 -0000       1.118
***************
*** 73,571 ****
                                    PRIMARY KEY ( `timestamp` , `user` )
                            )",
-       letter          => "(
-                                       module varchar(20) NOT NULL default '',
-                                       code varchar(20) NOT NULL default '',
-                                       name varchar(100) NOT NULL default '',
-                                       title varchar(200) NOT NULL default '',
-                                       content text,
-                                       PRIMARY KEY  (module,code)
-                               )",
-       alert           =>"(
-                                       alertid int(11) NOT NULL auto_increment,
-                                       borrowernumber int(11) NOT NULL default 
'0',
-                                       type varchar(10) NOT NULL default '',
-                                       externalid varchar(20) NOT NULL default 
'',
-                                       PRIMARY KEY  (alertid),
-                                       KEY borrowernumber (borrowernumber),
-                                       KEY type (type,externalid)
-                               )"
- );
- 
- my %requirefields = (
-       subscription => { 'letter' => 'char(20) NULL'},
- #    tablename        => { 'field' => 'fieldtype' },
- );
- 
- my %dropable_table = (
- # tablename => 'tablename',
- );
- 
- my %uselessfields = (
- # tablename => "field1,field2",
-       );
- # the other hash contains other actions that can't be done elsewhere. they 
are done
- # either BEFORE of AFTER everything else, depending on "when" entry (default 
=> AFTER)
- 
- # The tabledata hash contains data that should be in the tables.
- # The uniquefieldrequired hash entry is used to determine which (if any) 
fields
- # must not exist in the table for this row to be inserted.  If the
- # uniquefieldrequired entry is already in the table, the existing data is not
- # modified, unless the forceupdate hash entry is also set.  Fields in the
- # anonymous "forceupdate" hash will be forced to be updated to the default
- # values given in the %tabledata hash.
- 
- my %tabledata = (
- # tablename => [
- #     {       uniquefielrequired => 'fieldname', # the primary key in the 
table
- #             fieldname => fieldvalue,
- #             fieldname2 => fieldvalue2,
- #     },
- # ],
-     systempreferences => [
-               {
-             uniquefieldrequired => 'variable',
-             variable            => 'Activate_Log',
-             value               => 'On',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'Turn Log Actions on DB On an Off',
-           type                => 'YesNo',
-         },
-               {
-             uniquefieldrequired => 'variable',
-             variable            => 'ReturnBeforeExpiry',
-             value               => 'Off',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'If Yes, Returndate on issuing can\'t be 
after borrower card expiry',
-           type                => 'YesNo',
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'opacstylesheet',
-             value               => '',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'Enter a complete URL to use an alternate 
stylesheet in OPAC',
-           type                => 'free',
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'opacsmallimage',
-             value               => '',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'Enter a complete URL to an image, will be 
on top/left instead of the Koha logo',
-           type                => 'free',
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'opaclargeimage',
-             value               => '',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'Enter a complete URL to an image, will be 
on the main page, instead of the Koha logo',
-           type                => 'free',
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'delimiter',
-             value               => ';',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'separator for reports exported to 
spreadsheet',
-           type                => 'free',
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'MIME',
-             value               => 'OPENOFFICE.ORG',
-             forceupdate               => { 'explanation' => 1,
-                                    'type' => 1,
-                                    'options' => 1},
-             explanation         => 'Define the default application for report 
exportations into files',
-               type            => 'Choice',
-               options         => 'EXCEL|OPENOFFICE.ORG'
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'Delimiter',
-             value               => ';',
-               forceupdate             => { 'explanation' => 1,
-                                    'type' => 1,
-                                    'options' => 1},
-             explanation         => 'Define the default separator character 
for report exportations into files',
-               type            => 'Choice',
-               options         => ';|tabulation|,|/|\|#'
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'SubscriptionHistory',
-             value               => ';',
-               forceupdate             => { 'explanation' => 1,
-                                    'type' => 1,
-                                    'options' => 1},
-             explanation         => 'Define the information level for serials 
history in OPAC',
-               type            => 'Choice',
-               options         => 'simplified|full'
-         },
-         {
-             uniquefieldrequired => 'variable',
-             variable            => 'hidelostitems',
-             value               => 'No',
-           forceupdate         => { 'explanation' => 1,
-                                    'type' => 1},
-             explanation         => 'show or hide "lost" items in OPAC.',
-           type                => 'YesNo',
-         },
-     ],
- 
- );
- 
- my %fielddefinitions = (
- # fieldname => [
- #     {                 field => 'fieldname',
- #             type    => 'fieldtype',
- #             null    => '',
- #             key     => '',
- #             default => ''
- #         },
- #     ],
- );
- 
- #-------------------
- # Initialize
- 
- # Start checking
- 
- # Get version of MySQL database engine.
- my $mysqlversion = `mysqld --version`;
- $mysqlversion =~ /Ver (\S*) /;
- $mysqlversion = $1;
- if ( $mysqlversion ge '3.23' ) {
-     print "Could convert to MyISAM database tables...\n" unless $silent;
- }
- 
- #---------------------------------
- # Tables
- 
- # Collect all tables into a list
- $sth = $dbh->prepare("show tables");
- $sth->execute;
- while ( my ($table) = $sth->fetchrow ) {
-     $existingtables{$table} = 1;
- }
- 
- 
- # Now add any missing tables
- foreach $table ( keys %requiretables ) {
-     unless ( $existingtables{$table} ) {
-       print "Adding $table table...\n" unless $silent;
-         my $sth = $dbh->prepare("create table $table $requiretables{$table}");
-         $sth->execute;
-         if ( $sth->err ) {
-             print "Error : $sth->errstr \n";
-             $sth->finish;
-         }    # if error
-     }    # unless exists
- }    # foreach
- 
- # now drop useless tables
- foreach $table ( keys %dropable_table ) {
-       if ( $existingtables{$table} ) {
-               print "Dropping unused table $table\n" if $debug and not 
$silent;
-               $dbh->do("drop table $table");
-               if ( $dbh->err ) {
-                       print "Error : $dbh->errstr \n";
-               }
-       }
- }
- 
- #---------------------------------
- # Columns
- 
- foreach $table ( keys %requirefields ) {
-     print "Check table $table\n" if $debug and not $silent;
-     $sth = $dbh->prepare("show columns from $table");
-     $sth->execute();
-     undef %types;
-     while ( ( $column, $type, $null, $key, $default, $extra ) = 
$sth->fetchrow )
-     {
-         $types{$column} = $type;
-     }    # while
-     foreach $column ( keys %{ $requirefields{$table} } ) {
-         print "  Check column $column  [$types{$column}]\n" if $debug and not 
$silent;
-         if ( !$types{$column} ) {
- 
-             # column doesn't exist
-             print "Adding $column field to $table table...\n" unless $silent;
-             $query = "alter table $table
-                       add column $column " . 
$requirefields{$table}->{$column};
-             print "Execute: $query\n" if $debug;
-             my $sti = $dbh->prepare($query);
-             $sti->execute;
-             if ( $sti->err ) {
-                 print "**Error : $sti->errstr \n";
-                 $sti->finish;
-             }    # if error
-         }    # if column
-     }    # foreach column
- }    # foreach table
- 
- foreach $table ( keys %fielddefinitions ) {
-       print "Check table $table\n" if $debug;
-       $sth = $dbh->prepare("show columns from $table");
-       $sth->execute();
-       my $definitions;
-       while ( ( $column, $type, $null, $key, $default, $extra ) = 
$sth->fetchrow )
-       {
-               $definitions->{$column}->{type}    = $type;
-               $definitions->{$column}->{null}    = $null;
-               $definitions->{$column}->{key}     = $key;
-               $definitions->{$column}->{default} = $default;
-               $definitions->{$column}->{extra}   = $extra;
-       }    # while
-       my $fieldrow = $fielddefinitions{$table};
-       foreach my $row (@$fieldrow) {
-               my $field   = $row->{field};
-               my $type    = $row->{type};
-               my $null    = $row->{null};
-               my $key     = $row->{key};
-               my $default = $row->{default};
-               $default="''" unless $default;
-               my $extra   = $row->{extra};
-               my $def     = $definitions->{$field};
-               unless ( $type eq $def->{type}
-                       && $null eq $def->{null}
-                       && $key eq $def->{key}
-                       && $default eq $def->{default}
-                       && $extra eq $def->{extra} )
-               {
- 
-                       if ( $null eq '' ) {
-                               $null = 'NOT NULL';
-                       }
-                       if ( $key eq 'PRI' ) {
-                               $key = 'PRIMARY KEY';
-                       }
-                       unless ( $extra eq 'auto_increment' ) {
-                               $extra = '';
-                       }
-                       # if it's a new column use "add", if it's an old one, 
use "change".
-                       my $action;
-                       if ($definitions->{$field}->{type}) {
-                               $action="change $field"
-                       } else {
-                               $action="add";
-                       }
- # if it's a primary key, drop the previous pk, before altering the table
-                       my $sth;
-                       if ($key ne 'PRIMARY KEY') {
-                               $sth =$dbh->prepare("alter table $table $action 
$field $type $null $key $extra default ?");
-                       } else {
-                               $sth =$dbh->prepare("alter table $table drop 
primary key, $action $field $type $null $key $extra default ?");
-                       }
-                       $sth->execute($default);
-                       print "  Alter $field in $table\n" unless $silent;
-               }
-       }
- }
- 
- 
- # Populate tables with required data
- foreach my $table ( keys %tabledata ) {
-     print "Checking for data required in table $table...\n" unless $silent;
-     my $tablerows = $tabledata{$table};
-     foreach my $row (@$tablerows) {
-         my $uniquefieldrequired = $row->{uniquefieldrequired};
-         my $uniquevalue         = $row->{$uniquefieldrequired};
-         my $forceupdate         = $row->{forceupdate};
-         my $sth                 =
-           $dbh->prepare(
- "select $uniquefieldrequired from $table where $uniquefieldrequired=?"
-         );
-         $sth->execute($uniquevalue);
-       if ($sth->rows) {
-           foreach my $field (keys %$forceupdate) {
-               if ($forceupdate->{$field}) {
-                   my $sth=$dbh->prepare("update systempreferences set 
$field=? where $uniquefieldrequired=?");
-                   $sth->execute($row->{$field}, $uniquevalue);
-               }
-           }
-       } else {
-             print "Adding row to $table: " unless $silent;
-             my @values;
-             my $fieldlist;
-             my $placeholders;
-             foreach my $field ( keys %$row ) {
-                 next if $field eq 'uniquefieldrequired';
-               next if $field eq 'forceupdate';
-                 my $value = $row->{$field};
-                 push @values, $value;
-                 print "  $field => $value" unless $silent;
-                 $fieldlist .= "$field,";
-                 $placeholders .= "?,";
-             }
-             print "\n" unless $silent;
-             $fieldlist    =~ s/,$//;
-             $placeholders =~ s/,$//;
-             my $sth =
-               $dbh->prepare(
-                 "insert into $table ($fieldlist) values ($placeholders)");
-             $sth->execute(@values);
-         }
-     }
- }
- 
- # at last, remove useless fields
- foreach $table ( keys %uselessfields ) {
-       my @fields = split /,/,$uselessfields{$table};
-       my $fields;
-       my $exists;
-       foreach my $fieldtodrop (@fields) {
-               $fieldtodrop =~ s/\t//g;
-               $fieldtodrop =~ s/\n//g;
-               $exists =0;
-               $sth = $dbh->prepare("show columns from $table");
-               $sth->execute;
-               while ( my ( $column, $type, $null, $key, $default, $extra ) = 
$sth->fetchrow )
-               {
-                       $exists =1 if ($column eq $fieldtodrop);
-               }
-               if ($exists) {
-                       print "deleting $fieldtodrop field in $table...\n" 
unless $silent;
-                       my $sth = $dbh->prepare("alter table $table drop 
$fieldtodrop");
-                       $sth->execute;
-               }
-       }
- }    # foreach
- 
- 
- $sth->finish;
- 
- exit;
- 
- # $Log$
- # Revision 1.117  2005/08/04 14:24:39  tipaul
- # synch'ing 2.2 and head
- #
- # Revision 1.116  2005/08/04 08:55:54  tipaul
- # Letters / alert system, continuing...
- #
- # * adding a package Letters.pm, that manages Letters & alerts.
- # * adding feature : it's now possible to define a "letter" for any 
subscription created. If a letter is defined, users in OPAC can put an alert on 
the subscription. When an issue is marked "arrived", all users in the alert 
will recieve a mail (as defined in the "letter"). This last part (= send the 
mail) is not yet developped. (Should be done this week)
- # * adding feature : it's now possible to "put to an alert" in OPAC, for any 
serial subscription. The alert is stored in a new table, called alert. An alert 
can be put only if the librarian has activated them in subscription (and they 
activate it just by choosing a "letter" to sent to borrowers on new issues)
- # * adding feature : librarian can see in borrower detail which alerts they 
have put, and a user can see in opac-detail which alert they have put too.
- #
- # Note that the system should be generic enough to manage any type of alert.
- # I plan to extend it soon to virtual shelves : a borrower will be able to 
put an alert on a virtual shelf, to be warned when something is changed in the 
virtual shelf (mail being sent once a day by cron, or manually by the shelf 
owner. Anyway, a mail won't be sent on every change, users would be spammed by 
Koha ;-) )
- #
- # Revision 1.115  2005/08/02 16:15:34  tipaul
- # adding 2 fields to letter system :
- # * module (acquisition, catalogue...) : it will be usefull to show the 
librarian only letters he may be interested by.
- # * title, that will be used as mail subject.
- #
- # Revision 1.114  2005/07/28 15:10:13  tipaul
- # Introducing new "Letters" system : Letters will be used everytime you want 
to sent something to someone (through mail or paper). For example, sending a 
mail for overdues use letter that you can put as parameters. Sending a mail to 
a borrower when a suggestion is validated uses a letter too.
- # the letter table contains 3 fields :
- # * code => the code of the letter
- # * name => the complete name of the letter
- # * content => the complete text. It's a TEXT field type, so has no limits.
- #
- # My next goal now is to work on point 2-I "serial issue alert"
- # With this feature, in serials, a user can subscribe the "issue alert". For 
every issue arrived/missing, a mail is sent to all subscribers of this list. 
The mail warns the user that the issue is arrive or missing. Will be in head.
- # (see mail on koha-devel, 2005/04/07)
- #
- # The "serial issue alert" will be the 1st to use this letter system that 
probably needs some tweaking ;-)
- #
- # Once it will be stabilised default letters (in any languages) could be 
added during installer to help the library begin with this new feature.
- #
- # Revision 1.113  2005/07/28 08:38:41  tipaul
- # For instance, the return date does not rely on the borrower expiration 
date. A systempref will be added in Koha, to modify return date calculation 
schema :
- # * ReturnBeforeExpiry = yes => return date can't be after expiry date
- # * ReturnBeforeExpiry = no  => return date can be after expiry date
- #
- # Revision 1.112  2005/07/26 08:19:47  hdl
- # Adding IndependantBranches System preference variable in order to manage 
Branch independancy.
- #
- # Revision 1.111  2005/07/25 15:35:38  tipaul
- # we have decided that moving to Koha 3.0 requires being already in Koha 2.2.x
- # So, the updatedatabase script can highly be cleaned (90% removed).
- # Let's play with the new Koha DB structure now ;-)
- #
- #!/usr/bin/perl
- 
- # $Id$
- 
- # Database Updater
- # This script checks for required updates to the database.
- 
- # Part of the Koha Library Software www.koha.org
- # Licensed under the GPL.
- 
- # Bugs/ToDo:
- # - Would also be a good idea to offer to do a backup at this time...
- 
- # NOTE:  If you do something more than once in here, make it table driven.
- use strict;
- 
- # CPAN modules
- use DBI;
- use Getopt::Long;
- # Koha modules
- use C4::Context;
- 
- # FIXME - The user might be installing a new database, so can't rely
- # on /etc/koha.conf anyway.
- 
- my $debug = 0;
- 
- my (
-     $sth, $sti,
-     $query,
-     %existingtables,    # tables already in database
-     %types,
-     $table,
-     $column,
-     $type, $null, $key, $default, $extra,
-     $prefitem,          # preference item in systempreferences table
- );
- 
- my $silent;
- GetOptions(
-       's' =>\$silent
-       );
- my $dbh = C4::Context->dbh;
- print "connected to your DB. Checking & modifying it\n" unless $silent;
- 
- #-------------------
- # Defines
- 
- # Tables to add if they don't exist
- my %requiretables = (
-     categorytable       => "(categorycode char(5) NOT NULL default '',
-                              description text default '',
-                              itemtypecodes text default '',
-                              PRIMARY KEY (categorycode)
-                             )",
-     subcategorytable       => "(subcategorycode char(5) NOT NULL default '',
-                              description text default '',
-                              itemtypecodes text default '',
-                              PRIMARY KEY (subcategorycode)
-                             )",
-     mediatypetable       => "(mediatypecode char(5) NOT NULL default '',
-                              description text default '',
-                              itemtypecodes text default '',
-                              PRIMARY KEY (mediatypecode)
-                             )",
-     action_logs       => "(
-                                   `timestamp` TIMESTAMP NOT NULL ,
-                                   `user` INT( 11 ) NOT NULL ,
-                                   `module` TEXT default '',
-                                   `action` TEXT default '' ,
-                                   `object` INT(11) default '' ,
-                                   `info` TEXT default '' ,
-                                   PRIMARY KEY ( `timestamp` , `user` )
-                           )",
  );
  
--- 73,76 ----
***************
*** 847,850 ****
--- 352,358 ----
  
  # $Log$
+ # Revision 1.118  2005/08/04 16:02:55  tipaul
+ # oops... error in synch between 2.2 and head
+ #
  # Revision 1.117  2005/08/04 14:24:39  tipaul
  # synch'ing 2.2 and head




reply via email to

[Prev in Thread] Current Thread [Next in Thread]