kword
KWMailMergeKABC.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <kdebug.h>
00028 #include <kglobal.h>
00029 #include <klocale.h>
00030 #include <kabc/distributionlist.h>
00031 #include <kabc/stdaddressbook.h>
00032
00033 #include "KWMailMergeKABC.h"
00034 #include "KWMailMergeKABCConfig.h"
00035
00036 KWMailMergeKABC::KWMailMergeKABC( KInstance *inst, QObject *parent )
00037 : KWMailMergeDataSource( inst, parent )
00038 {
00039 _addressBook = KABC::StdAddressBook::self();
00040 _iterator = _addressBook->begin();
00041
00042
00043
00044
00045 sampleRecord[ ("KAddressbook identifier") ] = KABC::Addressee::uidLabel();
00046 sampleRecord[ ("Name" ) ] = KABC::Addressee::nameLabel();
00047 sampleRecord[ ("Formatted name" ) ] = KABC::Addressee::formattedNameLabel();
00048 sampleRecord[ ("Family names" ) ] = KABC::Addressee::familyNameLabel();
00049 sampleRecord[ ("Given name" ) ] = KABC::Addressee::givenNameLabel();
00050 sampleRecord[ ("Additional names" ) ] = KABC::Addressee::additionalNameLabel();
00051 sampleRecord[ ("Honorific prefixes" ) ] = KABC::Addressee::prefixLabel();
00052 sampleRecord[ ("Honorific suffixes" ) ] = KABC::Addressee::suffixLabel();
00053 sampleRecord[ ("Nick name" ) ] = KABC::Addressee::nickNameLabel();
00054 sampleRecord[ ("Birthday" ) ] = KABC::Addressee::birthdayLabel();
00055 sampleRecord[ ("Home address: Street" ) ] = KABC::Addressee::homeAddressStreetLabel();
00056 sampleRecord[ ("Home address: Locality" ) ] = KABC::Addressee::homeAddressLocalityLabel();
00057 sampleRecord[ ("Home address: Region" ) ] = KABC::Addressee::homeAddressRegionLabel();
00058 sampleRecord[ ("Home address: Postal code" ) ] = KABC::Addressee::homeAddressPostalCodeLabel();
00059 sampleRecord[ ("Home address: Country" ) ] = KABC::Addressee::homeAddressCountryLabel();
00060 sampleRecord[ ("Home address: Label" ) ] = KABC::Addressee::homeAddressLabelLabel();
00061 sampleRecord[ ("Business address: Street" ) ] = KABC::Addressee::businessAddressStreetLabel();
00062 sampleRecord[ ("Business address: Locality" ) ] = KABC::Addressee::businessAddressLocalityLabel();
00063 sampleRecord[ ("Business address: Region" ) ] = KABC::Addressee::businessAddressRegionLabel();
00064 sampleRecord[ ("Business address: Postal code" ) ] = KABC::Addressee::businessAddressPostalCodeLabel();
00065 sampleRecord[ ("Business address: Country" ) ] = KABC::Addressee::businessAddressCountryLabel();
00066 sampleRecord[ ("Business address: Label" ) ] = KABC::Addressee::businessAddressLabelLabel();
00067 sampleRecord[ ("Home phone" ) ] = KABC::Addressee::homePhoneLabel();
00068 sampleRecord[ ("Business phone" ) ] = KABC::Addressee::businessPhoneLabel();
00069 sampleRecord[ ("Mobile phone" ) ] = KABC::Addressee::mobilePhoneLabel();
00070 sampleRecord[ ("Home fax" ) ] = KABC::Addressee::homeFaxLabel();
00071 sampleRecord[ ("Business fax" ) ] = KABC::Addressee::businessFaxLabel();
00072 sampleRecord[ ("Car phone" ) ] = KABC::Addressee::carPhoneLabel();
00073 sampleRecord[ ("ISDN" ) ] = KABC::Addressee::isdnLabel();
00074 sampleRecord[ ("Pager" ) ] = KABC::Addressee::pagerLabel();
00075 sampleRecord[ ("Email" ) ] = KABC::Addressee::emailLabel();
00076 sampleRecord[ ("Mailer" ) ] = KABC::Addressee::mailerLabel();
00077 sampleRecord[ ("Time zone" ) ] = KABC::Addressee::timeZoneLabel();
00078 sampleRecord[ ("Geographic position" ) ] = KABC::Addressee::geoLabel();
00079 sampleRecord[ ("Title" ) ] = KABC::Addressee::titleLabel();
00080 sampleRecord[ ("Role" ) ] = KABC::Addressee::roleLabel();
00081 sampleRecord[ ("Organization" ) ] = KABC::Addressee::organizationLabel();
00082 sampleRecord[ ("Note" ) ] = KABC::Addressee::noteLabel();
00083 sampleRecord[ ("productId" ) ] = KABC::Addressee::productIdLabel();
00084 sampleRecord[ ("Revision" ) ] = KABC::Addressee::revisionLabel();
00085 sampleRecord[ ("sortString" ) ] = KABC::Addressee::sortStringLabel();
00086 sampleRecord[ ("URL" ) ] = KABC::Addressee::urlLabel();
00087 sampleRecord[ ("Secrecy" ) ] = KABC::Addressee::secrecyLabel();
00088 sampleRecord[ ("Preferred address: Street" ) ] = QString( "preferedAddressStreet" );
00089 sampleRecord[ ("Preferred address: Locality" ) ] = QString( "preferedAddressLocality" );
00090 sampleRecord[ ("Preferred address: Region" ) ] = QString( "preferedAddressRegion" );
00091 sampleRecord[ ("Preferred address: Postal code" ) ] = QString( "preferedAddressPostalCode" );
00092 sampleRecord[ ("Preferred address: Country" ) ] = QString( "preferedAddressCountry" );
00093 sampleRecord[ ("Preferred address: Label" ) ] = QString( "preferedAddressLabel" );
00094 }
00095
00096
00097 KWMailMergeKABC::~KWMailMergeKABC()
00098 {
00099 ;
00100 }
00101
00102
00103 void KWMailMergeKABC::addEntry( const QString &uid )
00104 {
00105 _individualUIDs.append( uid );
00106 makeUIDsExclusive();
00107 }
00108
00109
00110 void KWMailMergeKABC::addList( const QString &id )
00111 {
00112 _lists.append( id );
00113 parseList( id );
00114 makeUIDsExclusive();
00115 }
00116
00117
00118 void KWMailMergeKABC::clear()
00119 {
00120 _exclusiveUIDs.clear();
00121 _individualUIDs.clear();
00122 _listUIDs.clear();
00123 _lists.clear();
00124 }
00125
00126
00127 int KWMailMergeKABC::getNumRecords() const
00128 {
00129 kdDebug() << "KWMailMergeKABC::getNumRecords(): " << _exclusiveUIDs.count() << endl;
00130 return _exclusiveUIDs.count();
00131 }
00132
00133
00134 QString KWMailMergeKABC::getValue( const QString &name, int record ) const
00135 {
00136 kdDebug() << "KWMailMergeKABC::getValue(" << name << ", " << record << ")" << endl;
00137 if ( record < 0 )
00138 return name;
00139
00140
00141 if ( record == -1 && _iterator == _addressBook->end() )
00142 return "";
00143
00144
00145
00146
00147 bool uidAvailable = false;
00148 if ( record != -1 )
00149 {
00150 int counter = 0;
00151
00152 for ( _UIDIterator = _exclusiveUIDs.begin(); _UIDIterator != _exclusiveUIDs.end()
00153 && counter < record; _UIDIterator++ )
00154 {
00155 counter++;
00156 }
00157
00158 for ( _iterator = _addressBook->begin(); _iterator != _addressBook->end(); ++_iterator )
00159 {
00160
00161 if( _iterator->uid() == *_UIDIterator )
00162 {
00163 uidAvailable = true;
00164 break;
00165 }
00166 }
00167 }
00168
00169 if( !uidAvailable )
00170 {
00171 return ( i18n ( "KAddressbook entry '%1' not available." ).arg( *_UIDIterator ) );
00172 }
00173
00174
00175 KABC::Addressee addr = *_iterator;
00176 _iterator++;
00177
00178
00179
00180
00181
00182 if ( name == "KAddressbook identifier" )
00183 return addr.uid();
00184 if ( name == "Name" )
00185 return addr.name();
00186 if ( name == "Formatted name" )
00187 return addr.formattedName();
00188 if ( name == "Family names" )
00189 return addr.familyName();
00190 if ( name == "Given name" )
00191 return addr.givenName();
00192 if ( name == "Additional names" )
00193 return addr.additionalName();
00194 if ( name == "Honorific prefixes" )
00195 return addr.prefix();
00196 if ( name == "Honorific suffixes" )
00197 return addr.suffix();
00198 if ( name == "Nick name" )
00199 return addr.nickName();
00200 if ( name == "Birthday" )
00201 return KGlobal::locale()->formatDate( addr.birthday().date() );
00202
00203 if ( name == "Home address: Street" )
00204 {
00205 KABC::Address a = addr.address( KABC::Address::Home );
00206 return a.street();
00207 }
00208 if ( name == "Home address: Locality" )
00209 {
00210 KABC::Address a = addr.address( KABC::Address::Home );
00211 return a.locality();
00212 }
00213 if ( name == "Home address: Region" )
00214 {
00215 KABC::Address a = addr.address( KABC::Address::Home );
00216 return a.region();
00217 }
00218 if ( name == "Home address: Postal code" )
00219 {
00220 KABC::Address a = addr.address( KABC::Address::Home );
00221 return a.postalCode();
00222 }
00223 if ( name == "Home address: Country" )
00224 {
00225 KABC::Address a = addr.address( KABC::Address::Home );
00226 return a.country();
00227 }
00228 if ( name == "Home address: Label" )
00229 {
00230 KABC::Address a = addr.address( KABC::Address::Home );
00231 return a.label();
00232 }
00233
00234 if ( name == "Business address: Street" )
00235 {
00236 KABC::Address a = addr.address( KABC::Address::Work );
00237 return a.street();
00238 }
00239 if ( name == "Business address: Locality" )
00240 {
00241 KABC::Address a = addr.address( KABC::Address::Work );
00242 return a.locality();
00243 }
00244 if ( name == "Business address: Region" )
00245 {
00246 KABC::Address a = addr.address( KABC::Address::Work );
00247 return a.region();
00248 }
00249 if ( name == "Business address: Postal code" )
00250 {
00251 KABC::Address a = addr.address( KABC::Address::Work );
00252 return a.postalCode();
00253 }
00254 if ( name == "Business address: Country" )
00255 {
00256 KABC::Address a = addr.address( KABC::Address::Work );
00257 return a.country();
00258 }
00259 if ( name == "Business address: Label" )
00260 {
00261 KABC::Address a = addr.address( KABC::Address::Work );
00262 return a.label();
00263 }
00264
00265 if ( name == "Prefered address: Street" )
00266 {
00267 KABC::Address a = addr.address( KABC::Address::Pref );
00268 return a.street();
00269 }
00270
00271 if ( name == "Prefered address: Locality" )
00272 {
00273 KABC::Address a = addr.address( KABC::Address::Pref );
00274 return a.locality();
00275 }
00276 if ( name == "Prefered address: Region" )
00277 {
00278 KABC::Address a = addr.address( KABC::Address::Pref );
00279 return a.region();
00280 }
00281 if ( name == "Prefered address: Postal code" )
00282 {
00283 KABC::Address a = addr.address( KABC::Address::Pref );
00284 return a.postalCode();
00285 }
00286 if ( name == "Prefered address: Country" )
00287 {
00288 KABC::Address a = addr.address( KABC::Address::Pref );
00289 return a.country();
00290 }
00291 if ( name == "Prefered address: Label" )
00292 {
00293 KABC::Address a = addr.address( KABC::Address::Pref );
00294 return a.label();
00295 }
00296
00297 if ( name == "Home phone" )
00298 {
00299 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Home );
00300 return phone.number();
00301 }
00302 if ( name == "Business phone" )
00303 {
00304 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Work );
00305 return phone.number();
00306 }
00307 if ( name == "Mobile phone" )
00308 {
00309 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Cell );
00310 return phone.number();
00311 }
00312 if ( name == "Home fax" )
00313 {
00314 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
00315 return phone.number();
00316 }
00317 if ( name == "Business fax" )
00318 {
00319 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
00320 return phone.number();
00321 }
00322 if ( name == "Car phone" )
00323 {
00324 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Car );
00325 return phone.number();
00326 }
00327 if ( name == "ISDN" )
00328 {
00329 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Isdn );
00330 return phone.number();
00331 }
00332 if ( name == "Pager" )
00333 {
00334 KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Pager );
00335 return phone.number();
00336 }
00337
00338 if ( name == "Email" )
00339 return addr.preferredEmail();
00340 if ( name == "Mailer" )
00341 return addr.mailer();
00342 if ( name == "Time zone" )
00343 {
00344 KABC::TimeZone zone = addr.timeZone();
00345 return QString::number( zone.offset() );
00346 }
00347 if ( name == "Geographic position" )
00348 {
00349 KABC::Geo geo = addr.geo();
00350 QString lat;
00351 QString longi;
00352 if( geo.latitude()<0 )
00353 lat = QString( i18n("%1 South") ).arg( -geo.latitude() );
00354 else
00355 lat = QString( i18n("%1 North") ).arg( geo.latitude() );
00356
00357 if( geo.longitude()<0 )
00358
00359
00360 longi = QString( i18n("%1 West") ).arg( -geo.longitude() );
00361 else
00362 longi = QString( i18n("%1 East") ).arg( geo.longitude() );
00363
00364 return i18n( "Geographic coordinates", "%1, %2" ).arg ( lat, longi );
00365 }
00366
00367 if ( name == "Title" )
00368 return addr.title();
00369 if ( name == "Role" )
00370 return addr.role();
00371 if ( name == "Organization" )
00372 return addr.organization();
00373 if ( name == "Note" )
00374 return addr.note();
00375 if ( name == "productId" )
00376 return addr.productId();
00377 if ( name == "Revision" )
00378 return KGlobal::locale()->formatDate( addr.revision().date() );
00379 if ( name == "sortString" )
00380 return addr.sortString();
00381 if ( name == "URL" )
00382 return addr.url().url();
00383 if ( name == "Secrecy" )
00384 {
00385 KABC::Secrecy secrecy = addr.secrecy();
00386 return KABC::Secrecy::typeLabel( secrecy.type() );
00387 }
00388
00389 return ( i18n("Unkown mail merge variable: %1").arg ( name ) ) ;
00390 }
00391
00392
00393 QStringList KWMailMergeKABC::lists() const
00394 {
00395 return _lists;
00396 }
00397
00398
00399 void KWMailMergeKABC::load( QDomElement& parentElem )
00400 {
00401 clear();
00402 QDomNode contentNode=parentElem.namedItem("CONTENT");
00403 if( contentNode.isNull() )
00404 return;
00405 for( QDomNode rec=contentNode.firstChild(); !rec.isNull(); rec=rec.nextSibling() )
00406 {
00407 if( rec.nodeName()== "RECORD" )
00408 {
00409 for( QDomElement recEnt=rec.firstChild().toElement(); !recEnt.isNull();
00410 recEnt=recEnt.nextSibling().toElement() )
00411 {
00412 addEntry( recEnt.attribute( QString::fromLatin1("uid") ) );
00413 }
00414 }
00415 else if( rec.nodeName() == "LIST" )
00416 {
00417 for( QDomElement recEnt=rec.firstChild().toElement(); !recEnt.isNull();
00418 recEnt=recEnt.nextSibling().toElement() )
00419 {
00420 addList( recEnt.attribute( QString::fromLatin1("listid") ) );
00421 }
00422 }
00423 else
00424 kdDebug() << "rec.nodeName(): " << rec.nodeName() << endl;
00425 }
00426 }
00427
00428
00429 void KWMailMergeKABC::makeUIDsExclusive()
00430 {
00431 _exclusiveUIDs = _individualUIDs + _listUIDs;
00432 _exclusiveUIDs.sort();
00433 kdDebug() << "KWMailMergeKABC::makeUIDsExclusive(): before: " << _exclusiveUIDs.join(",")
00434 << endl;
00435 QString uid;
00436 for( QStringList::Iterator it=_exclusiveUIDs.begin();
00437 it!=_exclusiveUIDs.end(); ++it )
00438 {
00439 if( *it == uid )
00440 {
00441 it = _exclusiveUIDs.remove( it );
00442 }
00443 uid = *it;
00444 }
00445 kdDebug() << "KWMailMergeKABC::makeUIDsExclusive(): after: " << _exclusiveUIDs.join(",")
00446 << endl;
00447 }
00448
00449
00450 void KWMailMergeKABC::parseList( const QString& listName )
00451 {
00452 if( listName.isEmpty() )
00453 return;
00454
00455 kdDebug() << "KWMailMergeKABC::parseList: " << listName << endl;
00456 KABC::DistributionListManager dlm ( _addressBook );
00457 dlm.load();
00458
00459 QStringList::Iterator listIt;
00460
00461 KABC::DistributionList* list = dlm.list( listName );
00462 KABC::DistributionList::Entry::List entries = list->entries();
00463
00464 KABC::DistributionList::Entry::List::Iterator itemIt;
00465 for ( itemIt = entries.begin(); itemIt != entries.end(); ++itemIt )
00466 {
00467 kdDebug() << "WMailMergeKABC::parseList: Listentry UID: " <<
00468 (*itemIt).addressee.uid() << endl;
00469 _listUIDs.append( (*itemIt).addressee.uid() );
00470 }
00471 }
00472
00473
00474 void KWMailMergeKABC::refresh( bool )
00475 {
00476 kdDebug() << "KWMailMergeKABC::refresh()" << endl;
00477 _iterator = _addressBook->begin();
00478 _UIDIterator = _individualUIDs.begin();
00479
00480 }
00481
00482
00483 void KWMailMergeKABC::save( QDomDocument& doc, QDomElement& parent)
00484 {
00485 QDomElement cont=doc.createElement(QString::fromLatin1("CONTENT"));
00486 parent.appendChild(cont);
00487
00488 QValueList<QString>::ConstIterator it = _individualUIDs.begin();
00489 for( ; it != _individualUIDs.end(); ++it )
00490 {
00491 QDomElement rec=doc.createElement(QString::fromLatin1("RECORD"));
00492 cont.appendChild(rec);
00493 QDomElement recEnt=doc.createElement(QString::fromLatin1("ITEM"));
00494 recEnt.setAttribute(QString::fromLatin1("uid"),*it);
00495 rec.appendChild(recEnt);
00496 }
00497
00498 it = _lists.begin();
00499 for( ; !(it == _lists.end()); ++it )
00500 {
00501 QDomElement rec=doc.createElement(QString::fromLatin1("LIST"));
00502 cont.appendChild(rec);
00503 QDomElement recEnt=doc.createElement(QString::fromLatin1("ITEM"));
00504 recEnt.setAttribute(QString::fromLatin1("listid"),*it);
00505 rec.appendChild(recEnt);
00506 }
00507 }
00508
00509 bool KWMailMergeKABC::showConfigDialog( QWidget* par, int action )
00510 {
00511 bool ret=false;
00512 if (action == KWSLCreate )
00513 {
00514 clear();
00515 }
00516
00517
00518 {
00519 KWMailMergeKABCConfig *dia=new KWMailMergeKABCConfig( par, this );
00520
00521 ret=( dia->exec() == QDialog::Accepted );
00522 kdDebug() << "KWMailMergeKABCConfig::Accepted " << ret << endl;
00523 delete dia;
00524 }
00525 refresh(false);
00526
00527 return ret;
00528 }
00529
00530
00531 QStringList KWMailMergeKABC::singleRecords() const
00532 {
00533 return _individualUIDs;
00534 }
00535
00536
00537
00538 extern "C"
00539 {
00540 KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_kabc( KInstance *inst, QObject *parent )
00541 {
00542 return new KWMailMergeKABC( inst, parent );
00543 }
00544 }
00545
00546
00547
00548
00549 #include "KWMailMergeKABC.moc"
00550
00551
|