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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show 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 ## ------------------------------------------------------------------------
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