kword

KWMailMergeKABC.cpp

00001 /*
00002    This file is part of the KDE project
00003    Copyright (C) 2003 Tobias Koenig <tokoe@kde.org>
00004                       Joseph Wenninger <jowenn@kde.org>
00005                       Ingo Kloecker <kloecker@kde.org>
00006    Copyright (C) 2004 Tobias Koenig <tokoe@kde.org>
00007                       Joseph Wenninger <jowenn@kde.org>
00008                       Ingo Kloecker <kloecker@kde.org>
00009                       Dirk Schmidt <fs@dirk-schmidt.net>
00010  
00011    This library is free software; you can redistribute it and/or
00012    modify it under the terms of the GNU Library General Public
00013    License as published by the Free Software Foundation; either
00014    version 2 of the License, or (at your option) any later version.
00015  
00016    This library is distributed in the hope that it will be useful,
00017    but WITHOUT ANY WARRANTY; without even the implied warranty of
00018    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019    Library General Public License for more details.
00020  
00021    You should have received a copy of the GNU Library General Public License
00022    along with this library; see the file COPYING.LIB.  If not, write to
00023    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00024  * Boston, MA 02110-1301, USA.
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     // init record list
00044     // Using names from kaddressbook.
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     // This doesn't ever happen, right? So why is it there? Dirk Schmidt
00141     if ( record == -1 && _iterator == _addressBook->end() )
00142         return "";
00143 
00144     //
00145     // Set the iterator to the asked Addressee.
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++; // Don't know why. Could be removed? Dirk Schmidt
00177 
00178 
00179     //
00180     // Return the asked variable.
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             // There is something going wrong, because "W" is replaced by "q ".
00359             // Needs fix.
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     //if (action==KWSLOpen)
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 
KDE Home | KDE Accessibility Home | Description of Access Keys