Example #1
0
   bool
   NameChanger::RenameDomain(const String& oldDomainName, boost::shared_ptr<Domain> pDomain, String &errorMessage)
   {
      const String& newDomainName = pDomain->GetName();

      if (!_RenameDomainDataDirectory(oldDomainName, pDomain->GetName(), errorMessage))
         return false;

      // Update accounts...
      std::vector<boost::shared_ptr<Account> > vecAccounts = pDomain->GetAccounts()->GetVector();
      std::vector<boost::shared_ptr<Account> >::iterator iterAccount = vecAccounts.begin();
      std::vector<boost::shared_ptr<Account> >::iterator iterAccountEnd = vecAccounts.end();

      for (; iterAccount != iterAccountEnd; iterAccount++)
      {
         boost::shared_ptr<Account> pAccount = (*iterAccount);

         String sAddress = pAccount->GetAddress();
         _UpdateDomainName(sAddress, oldDomainName, newDomainName);
         pAccount->SetAddress(sAddress);

         String currentVal = pAccount->GetForwardAddress();
         if (_UpdateDomainName(currentVal, oldDomainName, newDomainName))
            pAccount->SetForwardAddress(currentVal);

         PersistentAccount::SaveObject(pAccount);
      }

      // Update aliases...
      std::vector<boost::shared_ptr<Alias> > vecAliases = pDomain->GetAliases()->GetVector();
      std::vector<boost::shared_ptr<Alias> >::iterator iterAlias = vecAliases.begin();
      std::vector<boost::shared_ptr<Alias> >::iterator iterAliasEnd = vecAliases.end();

      for (; iterAlias != iterAliasEnd; iterAlias++)
      {
         boost::shared_ptr<Alias> pAlias = (*iterAlias);

         String sAddress = pAlias->GetName();
         _UpdateDomainName(sAddress, oldDomainName, newDomainName);
         pAlias->SetName(sAddress);

         String aliasValue = pAlias->GetValue();

         if (_UpdateDomainName(aliasValue, oldDomainName, newDomainName))
            pAlias->SetValue(aliasValue);

         PersistentAlias::SaveObject(pAlias);
      }

      // Update lists...
      std::vector<boost::shared_ptr<DistributionList> > vecLists = pDomain->GetDistributionLists()->GetVector();
      std::vector<boost::shared_ptr<DistributionList> >::iterator iterList = vecLists.begin();
      std::vector<boost::shared_ptr<DistributionList> >::iterator iterListEnd = vecLists.end();

      for (; iterList != iterListEnd; iterList++)
      {
         boost::shared_ptr<DistributionList> pList = (*iterList);

         String sAddress = pList->GetAddress();
         _UpdateDomainName(sAddress, oldDomainName,newDomainName);
         pList->SetAddress(sAddress);

         vector<boost::shared_ptr<HM::DistributionListRecipient>> recipients = pList->GetMembers()->GetVector();
         boost_foreach(boost::shared_ptr<DistributionListRecipient> recipient, recipients)
         {
            String address = recipient->GetAddress();
            if (_UpdateDomainName(address,oldDomainName, newDomainName))
            {
               recipient->SetAddress(address);
               PersistentDistributionListRecipient::SaveObject(recipient);
            }
         }

         PersistentDistributionList::SaveObject(pList);
      }