/[cvs]/nfo/perl/libs/Data/Storage/Handler/MAPI.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Data/Storage/Handler/MAPI.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Mon Jan 20 16:43:58 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
+ initial check-in: refactored from code in Torus::Driver::mapi

1 joko 1.1 ## ------------------------------------------------------------------------
2     ## $Id$
3     ## ------------------------------------------------------------------------
4     ## $Log$
5     ## ------------------------------------------------------------------------
6    
7    
8     package Data::Storage::Handler::MAPI;
9    
10     use strict;
11     use warnings;
12    
13     use base qw(
14     Data::Storage::Handler
15     Data::Storage::Handler::Abstract
16     DesignPattern::Bridge
17     );
18    
19    
20     use Data::Dumper;
21    
22     # we need OLE to access Outlook's Contacts via MAPI
23     #use Win32::OLE::Strict;
24     use Win32::OLE;
25     use Win32::OLE::NLS qw(:LOCALE :DATE);
26    
27     use Data::Storage::Handler::File qw( s2f );
28    
29    
30     # get logger instance
31     my $logger = Log::Dispatch::Config->instance;
32    
33     my $logfile_errors = '../log/mapi_errors.log';
34    
35     # debugging?
36     my $DEBUGLEVEL;
37     my $DEBUG;
38    
39    
40     # main vars
41     my $map;
42     my $map_ldap;
43    
44     #my $self->{_COREHANDLE};
45     my $bool_mailerAlreadyRunning;
46    
47     sub debugLevel {
48     my $level_compare = shift;
49     return 1 if ($DEBUGLEVEL > $level_compare);
50     }
51    
52    
53    
54     sub getMetaInfo {
55     my $self = shift;
56     $logger->debug( __PACKAGE__ . "->getMetaInfo()" );
57     return {
58     'disconnectMethod' => 'disconnect',
59     };
60     }
61    
62     sub _init {
63     my $self = shift;
64     $self->load("Constants");
65     $self->load("Extensions");
66     #print Dumper($self);
67     #$DEBUGLEVEL = $self->{config}->get("debug_level");
68     #$DEBUG = ($self->{config}->get("debug_level") > 0);
69     }
70    
71     sub connect {
72    
73     my $self = shift;
74    
75     #print Dumper($self);
76    
77     $logger->info( __PACKAGE__ . ": creating mailer-object");
78     $self->{_COREHANDLE} = Win32::OLE->new('Outlook.Application') or die "oops - could not instantiate Outlook.Application";
79    
80     #$self->{_COREHANDLE}->Uninitialize();
81     #sleep 2;
82    
83     #$self->{_COREHANDLE}->Initialize();
84    
85     $bool_mailerAlreadyRunning = $self->mailerCheckRunning();
86    
87     if ($bool_mailerAlreadyRunning) {
88     $logger->info( __PACKAGE__ . ": *not* logging on, using running mailer");
89     } else {
90     if ($self->{locator}->{showProfileChooser}) {
91     $logger->info( __PACKAGE__ . ": logging in (using Profile-Chooser), this may take some seconds!");
92     $self->{_COREHANDLE}->Session->Logon ('', '', 1);
93     } else {
94     $logger->info( __PACKAGE__ . ": logging in (auto-selecting profile " . $self->{locator}->{ProfileName} . "), this may take some seconds!");
95     $self->{_COREHANDLE}->Session->Logon($self->{locator}->{ProfileName}, $self->{locator}->{ProfilePass}, 0);
96     }
97     }
98    
99     $self->{locator}->{status}->{connected} = 1;
100    
101     return 1;
102    
103     }
104    
105     sub _getConnectionInfo {
106     my $self = shift;
107     my $dsn = shift;
108     $dsn =~ m/host=(.+?);binddn=(.+?);pass=(.+?)$/;
109     my $args = {
110     host => $1,
111     binddn => $2,
112     pass => $3,
113     };
114     $args->{binddn} =~ s/'//g if $args->{binddn};
115     return $args;
116     }
117    
118     sub existsChildNode {
119     my $self = shift;
120     my $nodeName = shift;
121    
122     $logger->debug( __PACKAGE__ . "->existsChildNode( nodeName='$nodeName' )" );
123    
124     if (my $folder = $self->getContactFolder($nodeName)) {
125     #print "name: ", $folder->Name, "\n";
126     return 1;
127     } else {
128     $logger->debug( __PACKAGE__ . "->existsChildNode: child-node doesn't exist!" );
129     return;
130     }
131    
132     return 1;
133    
134     }
135    
136     sub disconnect {
137     my $self = shift;
138    
139     $logger->info( __PACKAGE__ . ": logging off");
140     $self->{_COREHANDLE}->Session->Logoff;
141    
142     if ($bool_mailerAlreadyRunning || $self->{config}->get("mapi_neverCloseOutlook")) {
143     $logger->info( __PACKAGE__ . ": *not* quitting running mailer!");
144     } else {
145     $logger->info( __PACKAGE__ . ": closing active mail-explorer");
146     $self->{_COREHANDLE}->ActiveExplorer->Close;
147     $logger->info( __PACKAGE__ . ": quitting mailer");
148     $self->{_COREHANDLE}->Quit;
149     }
150    
151     #$self->{_COREHANDLE}->Uninitialize();
152    
153     $logger->info( __PACKAGE__ . ": destroying mailer-object");
154     #undef $self->{_COREHANDLE};
155    
156     }
157    
158     sub _ldapError {
159     my $message = shift;
160     #print Dumper($message);
161     my $textMessage = "LDAP-ERROR: " . $message->error . " - code: " . $message->code;
162     $textMessage .= " - dn: " . $message->{matchedDN} if $message->{matchedDN};
163     #print "msg: '$textMessage'", "\n";
164     #a2f($logfile_errors, $textMessage) if !$TRACELEVEL;
165     $logger->error($textMessage);
166     return $message;
167     }
168    
169     sub getCOREHANDLE {
170     my $self = shift;
171     return $self->{_COREHANDLE};
172     }
173    
174     sub createChildNode {
175     my $self = shift;
176     my $nodeName = shift;
177     print "createChildNode: $nodeName", "\n";
178     my $nodeDn = Data::Identifier::Dn->new(base => $self->{locator}->{basedn}, type => 'ou', name => $nodeName);
179     return $self->createDn($nodeDn);
180     }
181    
182     sub getListFiltered {
183     my $self = shift;
184     my $nodename = shift;
185     return $self->getListUnfiltered($nodename);
186     }
187    
188    
189     my @list;
190     sub cb_recieveContact {
191     my $contact = shift;
192     #print Dumper($contact);
193     push @list, $contact;
194     }
195    
196     sub getListUnfiltered {
197     my $self = shift;
198     my $nodeName = shift;
199     @list = ();
200     $logger->debug( __PACKAGE__ . "->getListUnfiltered( nodeName => '" . $nodeName . "' )" );
201    
202     my $folder = $self->getContactFolder($nodeName);
203     $self->readMapiFolder($folder, \&cb_recieveContact);
204    
205     #print Dumper(\@list);
206    
207     return \@list;
208    
209     =pod
210     # get list of rows from rdbms by table name
211     my $result = $self->sendCommand("SELECT * FROM $nodename");
212     while ( my $row = $result->getNextEntry() ) {
213     push @list, $row;
214     }
215     return \@list;
216     =cut
217    
218     }
219    
220     1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed