35 #include "folderdiaacltab.h" 37 #include "kmfolderimap.h" 38 #include "kmfoldercachedimap.h" 39 #include "kmacctcachedimap.h" 42 #include <addressesdialog.h> 43 #include <tdeabc/addresseelist.h> 44 #ifdef TDEPIM_NEW_DISTRLISTS 45 #include <libtdepim/distributionlist.h> 47 #include <tdeabc/distributionlist.h> 49 #include <tdeabc/stdaddressbook.h> 50 #include <kaddrbook.h> 51 #include <kpushbutton.h> 53 #include <tdelocale.h> 58 #include <tqvbuttongroup.h> 59 #include <tqwidgetstack.h> 60 #include <tqradiobutton.h> 61 #include <tqwhatsthis.h> 64 #include <tdemessagebox.h> 66 using namespace KMail;
70 #define I18N_NOOP2( comment,x ) x 75 unsigned int permissions;
76 const char* userString;
77 } standardPermissions[] = {
78 { 0, I18N_NOOP2(
"Permissions",
"None" ) },
79 { ACLJobs::List | ACLJobs::Read | ACLJobs::WriteSeenFlag, I18N_NOOP2(
"Permissions",
"Read" ) },
80 { ACLJobs::List | ACLJobs::Read | ACLJobs::WriteSeenFlag | ACLJobs::Insert | ACLJobs::Post, I18N_NOOP2(
"Permissions",
"Append" ) },
81 { ACLJobs::AllWrite, I18N_NOOP2(
"Permissions",
"Write" ) },
82 { ACLJobs::All, I18N_NOOP2(
"Permissions",
"All" ) }
86 KMail::ACLEntryDialog::ACLEntryDialog( IMAPUserIdFormat userIdFormat,
const TQString& caption, TQWidget* parent,
const char* name )
87 : KDialogBase( parent, name, true , caption,
88 KDialogBase::
Ok|KDialogBase::Cancel, KDialogBase::
Ok, true )
89 , mUserIdFormat( userIdFormat )
91 TQWidget *page =
new TQWidget(
this );
93 TQGridLayout *topLayout =
new TQGridLayout( page, 4 , 3 , 0, spacingHint() );
95 TQLabel *label =
new TQLabel( i18n(
"&User identifier:" ), page );
96 topLayout->addWidget( label, 0, 0 );
98 mUserIdLineEdit =
new KLineEdit( page );
99 topLayout->addWidget( mUserIdLineEdit, 0, 1 );
100 label->setBuddy( mUserIdLineEdit );
101 TQWhatsThis::add( mUserIdLineEdit, i18n(
"The User Identifier is the login of the user on the IMAP server. This can be a simple user name or the full email address of the user; the login for your own account on the server will tell you which one it is." ) );
103 TQPushButton* kabBtn =
new TQPushButton( i18n(
"Se&lect..." ), page );
104 topLayout->addWidget( kabBtn, 0, 2 );
106 mButtonGroup =
new TQVButtonGroup( i18n(
"Permissions" ), page );
107 topLayout->addMultiCellWidget( mButtonGroup, 1, 1, 0, 2 );
109 for (
unsigned int i = 0;
110 i <
sizeof( standardPermissions ) /
sizeof( *standardPermissions );
112 TQRadioButton* cb =
new TQRadioButton( i18n(
"Permissions", standardPermissions[i].userString ), mButtonGroup );
114 mButtonGroup->insert( cb, standardPermissions[i].permissions );
116 topLayout->setRowStretch(2, 10);
118 TQLabel *noteLabel =
new TQLabel( i18n(
"<b>Note: </b>Renaming requires write permissions on the parent folder." ), page );
119 topLayout->addMultiCellWidget( noteLabel, 2, 2, 0, 2 );
121 connect( mUserIdLineEdit, TQT_SIGNAL( textChanged(
const TQString& ) ), TQT_SLOT( slotChanged() ) );
122 connect( kabBtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotSelectAddresses() ) );
123 connect( mButtonGroup, TQT_SIGNAL( clicked(
int ) ), TQT_SLOT( slotChanged() ) );
124 enableButtonOK(
false );
126 mUserIdLineEdit->setFocus();
128 incInitialSize( TQSize( 200, 0 ) );
131 void KMail::ACLEntryDialog::slotChanged()
133 enableButtonOK( !mUserIdLineEdit->text().isEmpty() && mButtonGroup->selected() != 0 );
136 static TQString addresseeToUserId(
const TDEABC::Addressee& addr, IMAPUserIdFormat userIdFormat )
138 TQString email = addr.preferredEmail();
139 if ( userIdFormat == FullEmail )
142 email.truncate( email.find(
'@' ) );
147 void KMail::ACLEntryDialog::slotSelectAddresses()
149 KPIM::AddressesDialog dlg(
this );
150 dlg.setShowCC(
false );
151 dlg.setShowBCC(
false );
152 if ( mUserIdFormat == FullEmail )
153 dlg.setSelectedTo( userIds() );
154 if ( dlg.exec() != TQDialog::Accepted )
157 const TQStringList distrLists = dlg.toDistributionLists();
158 TQString txt = distrLists.join(
", " );
159 const TDEABC::Addressee::List lst = dlg.toAddresses();
160 if ( !lst.isEmpty() ) {
161 for( TQValueList<TDEABC::Addressee>::ConstIterator it = lst.begin(); it != lst.end(); ++it ) {
162 if ( !txt.isEmpty() )
164 txt += addresseeToUserId( *it, mUserIdFormat );
167 mUserIdLineEdit->setText( txt );
170 void KMail::ACLEntryDialog::setValues(
const TQString& userId,
unsigned int permissions )
172 mUserIdLineEdit->setText( userId );
173 mButtonGroup->setButton( permissions );
174 enableButtonOK( !userId.isEmpty() );
177 TQString KMail::ACLEntryDialog::userId()
const 179 return mUserIdLineEdit->text();
182 TQStringList KMail::ACLEntryDialog::userIds()
const 184 return KPIM::splitEmailAddrList( mUserIdLineEdit->text() );
187 unsigned int KMail::ACLEntryDialog::permissions()
const 189 return mButtonGroup->selectedId();
198 class KMail::FolderDiaACLTab::ListViewItem :
public TDEListViewItem
201 ListViewItem( TQListView* listview )
202 : TDEListViewItem( listview, listview->lastItem() ),
203 mModified( false ), mNew( false ) {}
206 void save( ACLList& list,
207 #ifdef TDEPIM_NEW_DISTRLISTS
208 TDEABC::AddressBook* abook,
210 TDEABC::DistributionListManager& manager,
212 IMAPUserIdFormat userIdFormat );
214 TQString userId()
const {
return text( 0 ); }
215 void setUserId(
const TQString& userId ) { setText( 0, userId ); }
217 unsigned int permissions()
const {
return mPermissions; }
218 void setPermissions(
unsigned int permissions );
220 bool isModified()
const {
return mModified; }
221 void setModified(
bool b ) { mModified = b; }
225 bool isNew()
const {
return mNew; }
226 void setNew(
bool b ) { mNew = b; }
229 unsigned int mPermissions;
230 TQString mInternalRightsList;
236 static TQString permissionsToUserString(
unsigned int permissions,
const TQString& internalRightsList )
238 for (
unsigned int i = 0;
239 i <
sizeof( standardPermissions ) /
sizeof( *standardPermissions );
241 if ( permissions == standardPermissions[i].permissions )
242 return i18n(
"Permissions", standardPermissions[i].userString );
244 if ( internalRightsList.isEmpty() )
245 return i18n(
"Custom Permissions" );
247 return i18n(
"Custom Permissions (%1)" ).arg( internalRightsList );
250 void KMail::FolderDiaACLTab::ListViewItem::setPermissions(
unsigned int permissions )
252 mPermissions = permissions;
253 setText( 1, permissionsToUserString( permissions, TQString() ) );
256 void KMail::FolderDiaACLTab::ListViewItem::load(
const ACLListEntry& entry )
262 if ( entry.userId.contains(
' ' ) )
263 kdWarning(5006) <<
"Userid contains a space!!! '" << entry.userId <<
"'" << endl;
265 setUserId( entry.userId );
272 void KMail::FolderDiaACLTab::ListViewItem::save( ACLList& aclList,
273 #ifdef TDEPIM_NEW_DISTRLISTS
274 TDEABC::AddressBook* addressBook,
276 TDEABC::DistributionListManager& manager,
278 IMAPUserIdFormat userIdFormat )
281 #ifdef TDEPIM_NEW_DISTRLISTS 282 KPIM::DistributionList list = KPIM::DistributionList::findByName( addressBook, userId(),
false );
283 if ( !list.isEmpty() ) {
284 Q_ASSERT( mModified );
285 KPIM::DistributionList::Entry::List entryList = list.entries(addressBook);
286 KPIM::DistributionList::Entry::List::ConstIterator it;
290 TDEABC::DistributionList* list = manager.list( userId() );
292 Q_ASSERT( mModified );
293 TDEABC::DistributionList::Entry::List entryList = list->entries();
294 TDEABC::DistributionList::Entry::List::ConstIterator it;
296 for( it = entryList.begin(); it != entryList.end(); ++it ) {
297 TQString email = (*it).email;
298 if ( email.isEmpty() )
299 email = addresseeToUserId( (*it).addressee, userIdFormat );
302 aclList.append( entry );
305 ACLListEntry entry( userId(), mInternalRightsList, mPermissions );
310 aclList.append( entry );
316 KMail::FolderDiaACLTab::FolderDiaACLTab(
KMFolderDialog* dlg, TQWidget* parent,
const char* name )
322 mChanged( false ), mAccepting( false ), mSaving( false )
324 TQVBoxLayout* topLayout =
new TQVBoxLayout(
this );
327 mStack =
new TQWidgetStack(
this );
328 topLayout->addWidget( mStack );
330 mLabel =
new TQLabel( mStack );
331 mLabel->setAlignment( AlignHCenter | AlignVCenter | WordBreak );
332 mStack->addWidget( mLabel );
334 mACLWidget =
new TQHBox( mStack );
335 mACLWidget->setSpacing( KDialog::spacingHint() );
336 mListView =
new TDEListView( mACLWidget );
337 mListView->setAllColumnsShowFocus(
true );
338 mStack->addWidget( mACLWidget );
339 mListView->addColumn( i18n(
"User Id" ) );
340 mListView->addColumn( i18n(
"Permissions" ) );
342 connect( mListView, TQT_SIGNAL(doubleClicked(TQListViewItem*,
const TQPoint&,
int)),
343 TQT_SLOT(slotEditACL(TQListViewItem*)) );
344 connect( mListView, TQT_SIGNAL(returnPressed(TQListViewItem*)),
345 TQT_SLOT(slotEditACL(TQListViewItem*)) );
346 connect( mListView, TQT_SIGNAL(currentChanged(TQListViewItem*)),
347 TQT_SLOT(slotSelectionChanged(TQListViewItem*)) );
349 TQVBox* buttonBox =
new TQVBox( mACLWidget );
350 buttonBox->setSpacing( KDialog::spacingHint() );
351 mAddACL =
new KPushButton( i18n(
"Add Entry..." ), buttonBox );
352 mEditACL =
new KPushButton( i18n(
"Modify Entry..." ), buttonBox );
353 mRemoveACL =
new KPushButton( i18n(
"Remove Entry" ), buttonBox );
354 TQWidget *spacer =
new TQWidget( buttonBox );
355 spacer->setSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Expanding );
357 connect( mAddACL, TQT_SIGNAL( clicked() ), TQT_SLOT( slotAddACL() ) );
358 connect( mEditACL, TQT_SIGNAL( clicked() ), TQT_SLOT( slotEditACL() ) );
359 connect( mRemoveACL, TQT_SIGNAL( clicked() ), TQT_SLOT( slotRemoveACL() ) );
360 mEditACL->setEnabled(
false );
361 mRemoveACL->setEnabled(
false );
363 connect(
this, TQT_SIGNAL( changed(
bool) ), TQT_SLOT( slotChanged(
bool) ) );
367 KURL KMail::FolderDiaACLTab::imapURL()
const 369 KURL url = mImapAccount->getUrl();
370 url.setPath( mImapPath );
374 void KMail::FolderDiaACLTab::initializeWithValuesFromFolder(
KMFolder* folder )
378 if ( mFolderType == KMFolderTypeImap ) {
379 KMFolderImap* folderImap =
static_cast<KMFolderImap*
>( folder->storage() );
380 mImapPath = folderImap->imapPath();
381 mImapAccount = folderImap->account();
382 mUserRights = folderImap->userRights();
383 mUserRightsState = folderImap->userRightsState();
385 else if ( mFolderType == KMFolderTypeCachedImap ) {
386 KMFolderCachedImap* folderImap =
static_cast<KMFolderCachedImap*
>( folder->storage() );
387 mImapPath = folderImap->imapPath();
388 mImapAccount = folderImap->account();
389 mUserRights = folderImap->userRights();
390 mUserRightsState = folderImap->userRightsState();
396 void KMail::FolderDiaACLTab::load()
398 if ( mDlg->folder() ) {
400 initializeWithValuesFromFolder( mDlg->folder() );
401 }
else if ( mDlg->parentFolder() ) {
403 initializeWithValuesFromFolder( mDlg->parentFolder() );
413 TQString defaultFormat =
"fullemail";
415 if ( mImapAccount && mImapAccount->login().find(
'@') == -1 )
416 defaultFormat =
"username";
417 TDEConfigGroup configGroup( kmkernel->config(),
"IMAP" );
418 TQString str = configGroup.readEntry(
"UserIdFormat", defaultFormat );
419 mUserIdFormat = FullEmail;
420 if ( str ==
"username" )
421 mUserIdFormat = UserName;
423 if ( mFolderType == KMFolderTypeCachedImap ) {
424 KMFolder* folder = mDlg->folder() ? mDlg->folder() : mDlg->parentFolder();
425 KMFolderCachedImap* folderImap =
static_cast<KMFolderCachedImap*
>( folder->storage() );
428 TQString text = i18n(
"Error retrieving user permissions." );
430 text +=
"\n" + i18n(
"You might not have enough permissions to see the permissions of this folder." );
432 mLabel->setText( text );
435 mLabel->setText( i18n(
"Information not retrieved from server, you need to use \"Check Mail\" and have administrative privileges on the folder."));
437 loadFinished( folderImap->aclList() );
448 mStack->raiseWidget( mLabel );
449 if ( !mImapAccount ) {
450 mLabel->setText( i18n(
"Error: no IMAP account defined for this folder" ) );
453 KMFolder* folder = mDlg->folder() ? mDlg->folder() : mDlg->parentFolder();
454 if ( folder && folder->storage() == mImapAccount->rootFolder() )
456 mLabel->setText( i18n(
"Connecting to server %1, please wait..." ).arg( mImapAccount->host() ) );
457 ImapAccountBase::ConnectionState state = mImapAccount->makeConnection();
458 if ( state == ImapAccountBase::Error ) {
459 slotConnectionResult( -1, TQString() );
460 }
else if ( state == ImapAccountBase::Connecting ) {
461 connect( mImapAccount, TQT_SIGNAL( connectionResult(
int,
const TQString&) ),
462 this, TQT_SLOT( slotConnectionResult(
int,
const TQString&) ) );
464 slotConnectionResult( 0, TQString() );
468 void KMail::FolderDiaACLTab::slotConnectionResult(
int errorCode,
const TQString& errorMsg )
470 disconnect( mImapAccount, TQT_SIGNAL( connectionResult(
int,
const TQString&) ),
471 this, TQT_SLOT( slotConnectionResult(
int,
const TQString&) ) );
473 if ( errorCode == -1 )
474 mLabel->setText( i18n(
"Error connecting to server %1" ).arg( mImapAccount->host() ) );
477 mLabel->setText( TDEIO::buildErrorString( errorCode, errorMsg ) );
482 connect( mImapAccount, TQT_SIGNAL( receivedUserRights(
KMFolder* ) ),
483 this, TQT_SLOT( slotReceivedUserRights(
KMFolder* ) ) );
484 KMFolder* folder = mDlg->folder() ? mDlg->folder() : mDlg->parentFolder();
485 mImapAccount->getUserRights( folder, mImapPath );
491 void KMail::FolderDiaACLTab::slotReceivedUserRights(
KMFolder* folder )
493 if ( !mImapAccount->hasACLSupport() ) {
494 mLabel->setText( i18n(
"This IMAP server does not have support for access control lists (ACL)" ) );
498 if ( folder == mDlg->folder() ? mDlg->folder() : mDlg->parentFolder() ) {
499 KMFolderImap* folderImap =
static_cast<KMFolderImap*
>( folder->storage() );
500 mUserRights = folderImap->userRights();
501 mUserRightsState = folderImap->userRightsState();
506 void KMail::FolderDiaACLTab::startListing()
509 mImapAccount->getACL( mDlg->folder() ? mDlg->folder() : mDlg->parentFolder(), mImapPath );
510 connect( mImapAccount, TQT_SIGNAL(receivedACL(
KMFolder*, TDEIO::Job*,
const KMail::ACLList& )),
511 this, TQT_SLOT(slotReceivedACL(
KMFolder*, TDEIO::Job*,
const KMail::ACLList& )) );
514 void KMail::FolderDiaACLTab::slotReceivedACL(
KMFolder* folder, TDEIO::Job* job,
const KMail::ACLList& aclList )
516 if ( folder == ( mDlg->folder() ? mDlg->folder() : mDlg->parentFolder() ) ) {
517 disconnect( mImapAccount, TQT_SIGNAL(receivedACL(
KMFolder*, TDEIO::Job*,
const KMail::ACLList& )),
518 this, TQT_SLOT(slotReceivedACL(
KMFolder*, TDEIO::Job*,
const KMail::ACLList& )) );
520 if ( job && job->error() ) {
521 if ( job->error() == TDEIO::ERR_UNSUPPORTED_ACTION )
522 mLabel->setText( i18n(
"This IMAP server does not have support for access control lists (ACL)" ) );
524 mLabel->setText( i18n(
"Error retrieving access control list (ACL) from server\n%1" ).arg( job->errorString() ) );
528 loadFinished( aclList );
532 void KMail::FolderDiaACLTab::loadListView(
const ACLList& aclList )
535 for( ACLList::const_iterator it = aclList.begin(); it != aclList.end(); ++it ) {
537 if ( (*it).permissions > -1 ) {
538 ListViewItem* item =
new ListViewItem( mListView );
540 if ( !mDlg->folder() )
541 item->setModified(
true );
546 void KMail::FolderDiaACLTab::loadFinished(
const ACLList& aclList )
548 loadListView( aclList );
549 if ( mDlg->folder() )
550 mInitialACLList = aclList;
551 mStack->raiseWidget( mACLWidget );
552 slotSelectionChanged( mListView->selectedItem() );
555 void KMail::FolderDiaACLTab::slotEditACL(TQListViewItem* item)
558 bool canAdmin = ( mUserRights & ACLJobs::Administer );
560 if ( canAdmin && mImapAccount && item ) {
562 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( item );
563 if ( mImapAccount->login() == ACLitem->userId() && ACLitem->permissions() == ACLJobs::All )
566 if ( !canAdmin )
return;
568 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( mListView->currentItem() );
569 ACLEntryDialog dlg( mUserIdFormat, i18n(
"Modify Permissions" ),
this );
570 dlg.setValues( ACLitem->userId(), ACLitem->permissions() );
571 if ( dlg.exec() == TQDialog::Accepted ) {
572 TQStringList userIds = dlg.userIds();
573 Q_ASSERT( !userIds.isEmpty() );
574 ACLitem->setUserId( dlg.userIds().front() );
575 ACLitem->setPermissions( dlg.permissions() );
576 ACLitem->setModified(
true );
578 if ( userIds.count() > 1 ) {
580 addACLs( userIds, dlg.permissions() );
585 void KMail::FolderDiaACLTab::slotEditACL()
587 slotEditACL( mListView->currentItem() );
590 void KMail::FolderDiaACLTab::addACLs(
const TQStringList& userIds,
unsigned int permissions )
592 for( TQStringList::const_iterator it = userIds.begin(); it != userIds.end(); ++it ) {
593 ListViewItem* ACLitem =
new ListViewItem( mListView );
594 ACLitem->setUserId( *it );
595 ACLitem->setPermissions( permissions );
596 ACLitem->setModified(
true );
597 ACLitem->setNew(
true );
601 void KMail::FolderDiaACLTab::slotAddACL()
603 ACLEntryDialog dlg( mUserIdFormat, i18n(
"Add Permissions" ),
this );
604 if ( dlg.exec() == TQDialog::Accepted ) {
605 const TQStringList userIds = dlg.userIds();
606 addACLs( dlg.userIds(), dlg.permissions() );
611 void KMail::FolderDiaACLTab::slotSelectionChanged(TQListViewItem* item)
613 bool canAdmin = ( mUserRights & ACLJobs::Administer );
614 bool canAdminThisItem = canAdmin;
615 if ( canAdmin && mImapAccount && item ) {
617 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( item );
618 if ( mImapAccount->login() == ACLitem->userId() && ACLitem->permissions() == ACLJobs::All )
619 canAdminThisItem =
false;
622 bool lvVisible = mStack->visibleWidget() == mACLWidget;
623 mAddACL->setEnabled( lvVisible && canAdmin && !mSaving );
624 mEditACL->setEnabled( item && lvVisible && canAdminThisItem && !mSaving );
625 mRemoveACL->setEnabled( item && lvVisible && canAdminThisItem && !mSaving );
628 void KMail::FolderDiaACLTab::slotRemoveACL()
630 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( mListView->currentItem() );
633 if ( !ACLitem->isNew() ) {
634 if ( mImapAccount && mImapAccount->login() == ACLitem->userId() ) {
635 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel( topLevelWidget(),
636 i18n(
"Do you really want to remove your own permissions for this folder? You will not be able to access it afterwards." ), i18n(
"Remove" ) ) )
639 mRemovedACLs.append( ACLitem->userId() );
647 if ( !mChanged || !mImapAccount )
651 if ( mFolderType == KMFolderTypeCachedImap )
660 if ( !mChanged || !mImapAccount )
662 assert( mDlg->folder() );
677 TDEABC::AddressBook *addressBook = TDEABC::StdAddressBook::self(
true );
678 #ifndef TDEPIM_NEW_DISTRLISTS 679 TDEABC::DistributionListManager manager( addressBook );
683 for ( TQListViewItem* item = mListView->firstChild(); item; item = item->nextSibling() ) {
684 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( item );
685 ACLitem->save( aclList,
686 #ifdef TDEPIM_NEW_DISTRLISTS
693 loadListView( aclList );
697 for( ACLList::ConstIterator init = mInitialACLList.begin(); init != mInitialACLList.end(); ++init ) {
698 bool isInNewList =
false;
699 TQString uid = (*init).userId;
700 for( ACLList::ConstIterator it = aclList.begin(); it != aclList.end() && !isInNewList; ++it )
701 isInNewList = uid == (*it).userId;
702 if ( !isInNewList && !mRemovedACLs.contains(uid) )
703 mRemovedACLs.append( uid );
706 for ( TQStringList::ConstIterator rit = mRemovedACLs.begin(); rit != mRemovedACLs.end(); ++rit ) {
711 aclList.append( entry );
716 if ( mFolderType == KMFolderTypeCachedImap ) {
719 KMFolderCachedImap* folderImap =
static_cast<KMFolderCachedImap*
>( mDlg->folder()->storage() );
720 folderImap->setACLList( aclList );
726 KMFolderImap* parentImap = mDlg->parentFolder() ?
static_cast<KMFolderImap*
>( mDlg->parentFolder()->storage() ) : 0;
728 if ( mDlg->isNewFolder() ) {
731 connect( parentImap, TQT_SIGNAL( directoryListingFinished(KMFolderImap*) ),
732 this, TQT_SLOT( slotDirectoryListingFinished(KMFolderImap*) ) );
734 slotDirectoryListingFinished( parentImap );
739 void KMail::FolderDiaACLTab::slotDirectoryListingFinished(KMFolderImap* f)
742 f != static_cast<KMFolderImap*>( mDlg->parentFolder()->storage() ) ||
744 !mDlg->folder()->storage() ) {
745 emit readyForAccept();
750 KMFolderImap* folderImap =
static_cast<KMFolderImap*
>( mDlg->folder()->storage() );
751 if ( !folderImap || folderImap->imapPath().isEmpty() )
753 mImapPath = folderImap->imapPath();
757 jd.total = 1; jd.done = 0; jd.parent = 0;
758 mImapAccount->insertJob(job, jd);
760 connect(job, TQT_SIGNAL(result(TDEIO::Job *)),
761 TQT_SLOT(slotMultiSetACLResult(TDEIO::Job *)));
762 connect(job, TQT_SIGNAL(aclChanged(
const TQString&,
int )),
763 TQT_SLOT(slotACLChanged(
const TQString&,
int )) );
766 void KMail::FolderDiaACLTab::slotMultiSetACLResult(TDEIO::Job* job)
768 ImapAccountBase::JobIterator it = mImapAccount->findJob( job );
769 if ( it == mImapAccount->jobsEnd() )
return;
770 mImapAccount->removeJob( it );
772 if ( job->error() ) {
773 job->showErrorDialog(
this );
780 emit readyForAccept();
784 void KMail::FolderDiaACLTab::slotACLChanged(
const TQString& userId,
int permissions )
789 if ( permissions > -1 ) {
790 for ( TQListViewItem* item = mListView->firstChild(); item; item = item->nextSibling() ) {
791 ListViewItem* ACLitem =
static_cast<ListViewItem *
>( item );
792 if ( ACLitem->userId() == userId ) {
793 ACLitem->setModified(
false );
794 ACLitem->setNew(
false );
800 uint nr = mRemovedACLs.remove( userId );
804 kdWarning(5006) << k_funcinfo <<
" no item found for userId " << userId << endl;
807 void KMail::FolderDiaACLTab::slotChanged(
bool b )
812 bool KMail::FolderDiaACLTab::supports(
KMFolder* refFolder )
814 ImapAccountBase* imapAccount = 0;
815 if ( refFolder->
folderType() == KMFolderTypeImap )
816 imapAccount = static_cast<KMFolderImap*>( refFolder->storage() )->account();
818 imapAccount =
static_cast<KMFolderCachedImap*
>( refFolder->storage() )->account();
819 return imapAccount && imapAccount->hasACLSupport();
822 #include "folderdiaacltab.moc"
KMFolderType folderType() const
Returns the type of this folder.
int permissions
based on the ACLPermissions enum
One entry in the ACL list: user and permissions.
This is the base class for tabs in the folder dialog.
virtual bool save()
Unlike ConfigModuleTab, we return a bool from save.
MultiSetACLJob * multiSetACL(TDEIO::Slave *slave, const KURL &url, const ACLList &acl)
Set and delete a list of permissions for different users on a given url.
virtual AccepStatus accept()
Called when clicking OK.
TQString internalRightsList
protocol-dependent string (e.g. IMAP rights list)
bool changed
special flag for KMFolderCachedImap
The user rights/ACL have been fetched from the server sucessfully.
The user rights/ACL have not been fetched from the server yet, we don't know them.
Dialog for handling the properties of a mail folder.
"New Access Control Entry" dialog.
The attempt to fetch the user rights/ACL from the server failed.