[MKDoc-commit] Moving ufi data load script to ufi-centres modules.

sam at mkdoc.demon.co.uk sam at mkdoc.demon.co.uk
Sun Aug 20 23:20:38 BST 2006


Log Message:
-----------
Moving ufi data load script to ufi-centres modules.

Tags:
----
mkdoc-1-6

Removed Files:
-------------
    mkd/tools:
        ufi_load_centre_details.pl

-------------- next part --------------
--- tools/ufi_load_centre_details.pl
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/perl
-
-# ------------------------------------------------------------------
-# ufi_load_centre_details.pl
-# ------------------------------------------------------------------
-# Author : Sam Tregar
-# Copyright : (c) MKDoc Holdings Ltd, 2006
-#
-# This file is part of MKDoc. 
-# 
-# MKDoc is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-# 
-# MKDoc is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with MKDoc; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-# ------------------------------------------------------------------
-
-# This script loads the Centre_Details table and associated tables
-# with data from the UK Online database, using the UFI::Centres module
-# to load this data.
-#
-# This script should be run periodically from cron to keep the data in
-# the Centre_Details table up-to-date.  It produces no output unless
-# an error is encountered.
-
-use strict;
-use warnings;
-use MKDoc;
-use UFI::CentresCSV;
-
-# make sure SITE_DIR is set since MKDoc->init needs it
-die "SITE_DIR isn't set.  Please source mksetenv.sh from an installed ".
-  "MKDoc site and try again.\n" 
-  unless $ENV{SITE_DIR};
-
-# initialize MKDoc, needed for database connection
-MKDoc->init;
-
-my $dbh = lib::sql::DBH->get();
-
-# insert handle for base centre data
-my $centre_insert_sth = $dbh->prepare(<<END);
-INSERT INTO Centre_Details 
-  (Centre_ID, Centre_Name, Address1, Address2, Address3, 
-   Town, County, Postcode, Status, Telephone, Email, Website, Charges,
-   Sun_OpenHours, Mon_OpenHours, Tue_OpenHours, Wed_OpenHours,
-   Thu_OpenHours, Fri_OpenHours, Sat_OpenHours, 
-   WeekEnds_OpenHours, WeekDays_OpenHours,
-   OpenToPublic, NumWorkstations, 
-   Normalised_Centre_Name, Normalised_Postcode) 
-VALUES 
-  (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
-END
-my @centre_insert_fields = 
-  qw(ID CentreName Address1 Address2 Address3 
-     Town County Postcode Status CentreTelNo CentreEmail CentreWebsite
-     Charges Sun_OpenHours Mon_OpenHours Tue_OpenHours Wed_OpenHours
-     Thu_OpenHours Fri_OpenHours Sat_OpenHours 
-     WeekEnds_OpenHours WeekDays_OpenHours OpenToPublic NumWorkstations
-     Normalised_CentreName Normalised_Postcode);
-
-# insert handle for contacts
-my $contact_insert_sth = $dbh->prepare(<<END);
-INSERT INTO Centre_Contact (Centre_ID,
-                            Title, First_Name, Family_Name, Job_Title,
-                            Telephone, Extension, Fax, Mobile, Email,
-                            PublicContact, Ord)
-VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
-END
-my @contact_insert_fields =
-  qw(ID
-     Contact_1_Title
-     Contact_1_FirstName
-     Contact_1_Surname
-     Contact_1_JobTitle
-     Contact_1_TelNo
-     Contact_1_Ext
-     Contact_1_FaxNo
-     Contact_1_Mobile
-     Contact_1_Email
-     Contact_1_PublicContact);
-
-# setup handles for boolean set tables
-my %boolean_sets = (
-   Facility       => 'Facility',
-   TargetAudience => 'TargetAud',
-   Campaign       => 'Campaign',
-   CentreType     => 'CentreType',
-);
-my %boolean_insert_sth;
-foreach my $name (keys %boolean_sets) {
-    $boolean_insert_sth{$name} = $dbh->prepare(<<END);
-      INSERT INTO Centre_$name (Centre_ID, ${name}_ID) VALUES (?,?)
-END
-}
-
-# handle connect-type, a boolean set with some additional data
-my $connect_type_insert_sth = $dbh->prepare(<<END);
-      INSERT INTO Centre_ConnectType (Centre_ID, ConnectType_ID, NumberOfPCs)
-      VALUES (?,?,?)
-END
-  
-
-# get a list of centre IDs
-my $centres = UFI::CentresCSV->new($ENV{SITE_DIR} . '/UFI-Centres-data.txt');
-$centres->Read;
-
-my $ids = $centres->get_all_ids();
-
-# get a table lock to prevent problems from clients getting a
-# half-full table
-my @tables = qw(Centre_Details Centre_Contact 
-                Centre_Facility Centre_Campaign
-                Centre_ConnectType Centre_CentreType 
-                Centre_TargetAudience);
-$dbh->do('LOCK TABLES ' . join(', ', map { "$_ WRITE" } @tables));
-
-# be sure to unlock at the end, no matter what
-END { 
-    if ($dbh) {
-        $dbh->do('UNLOCK TABLES');
-        $dbh->disconnect;
-    }
-}
-
-# clear the tables
-$dbh->do("DELETE FROM $_") for @tables;
-
-# load each centre into the DB
-foreach my $id (@$ids) {
-    my $data = $centres->get_by_id($id);
-    defined $data->{$_} or $data->{$_} = "" for keys %$data;
-      
-    $centre_insert_sth->execute(map { $data->{$_} } @centre_insert_fields);
-
-    # insert contacts
-    for my $ord (1 .. 4) {
-        next unless $data->{"Contact_${ord}_Surname"}; # skip missing contacts
-        $contact_insert_sth->execute(
-          (map { s!_\d_!_${ord}_!; $data->{$_} } @contact_insert_fields),
-          $ord);
-    }
-
-    # deal with boolean sets
-    foreach my $name (keys %boolean_sets) {
-        my @ids = map { s!\D!!g; $_ } 
-                  grep { /^$boolean_sets{$name}_\d+$/ and $data->{$_} } 
-                  keys %$data;
-        $boolean_insert_sth{$name}->execute($data->{ID}, $_) for @ids;
-    }
-
-    # deal with connect types
-    my @ids = map { s!\D!!g; $_ } 
-              grep { /^ConnectType_\d+$/ and $data->{$_} } 
-              keys %$data;
-    my @pcs = map { $data->{"ConnectType_${_}_NumPCs"} } @ids;
-    $connect_type_insert_sth->execute($data->{ID}, $ids[$_], $pcs[$_])
-      for (0 .. $#ids);
-}


More information about the MKDoc-commit mailing list