Click here to Skip to main content
15,895,084 members
Articles / Programming Languages / C#

LumiSoft MailServer

Rate me:
Please Sign up or sign in to vote.
3.79/5 (22 votes)
17 Nov 2006CPOL1 min read 323.1K   4.9K   74  
Full featured SMTP/POP3/IMAP server

CREATE PROCEDURE [dbo].[lspr_AddDomain] 
	@DomainID    nvarchar(100) = NULL,
	@DomainName  nvarchar(100) = NULL,
	@Description nvarchar(100) = NULL
AS

set nocount on

if(not exists(select * from lsDomains where (DomainID=@DomainID)))
begin
	if(not exists(select * from lsDomains where (DomainName=@DomainName)))
	begin
		insert lsDomains (DomainID,DomainName,Description) values (@DomainID,@DomainName,@Description)

		select null as ErrorText
	end
	else
	begin
		select 'Domain with specified name "' + @DomainName + '" already exists !' as ErrorText
	end
end
else
begin
	select 'Domain with specified ID "' + @DomainID + '" already exists !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_AddFilter]
	@FilterID    nvarchar(100) = NULL,
	@Description nvarchar(100) = NULL,
	@Type        nvarchar(100) = NULL,
	@Assembly    nvarchar(100) = NULL,
	@ClassName   nvarchar(100) = NULL,
	@Cost        bigint        = 0,
	@Enabled     bit           = true
AS

set nocount on

if(not exists(select * from lsFilters where (FilterID=@FilterID)))
begin
	insert lsFilters (FilterID,Description,Type,Assembly,ClassName,Cost,Enabled) 
	values (@FilterID,@Description,@Type,@Assembly,@ClassName,@Cost,@Enabled)

	select null as ErrorText
end
else
begin
	select 'Filter with specified ID "' + @FilterID + '" already exists !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_AddGlobalMessageRule]
	@ruleID          nvarchar(100) = NULL,
	@cost            bigint        = NULL,
	@enabled         bit           = NULL,
	@checkNextRule   int           = NULL,
	@description     nvarchar(400) = NULL,
	@matchExpression image         = NULL
AS
BEGIN
	if(not exists(select * from lsGlobalMessageRules where (RuleID = @ruleID)))
	begin
		insert lsGlobalMessageRules (RuleID,Cost,Enabled,CheckNextRuleIf,Description,MatchExpression) 
			values (@ruleID,@cost,@enabled,@checkNextRule,@description,@matchExpression)

		select null as ErrorText
	end
	else
	begin
		select 'Rule with specified ID "' + @ruleID + '" already exists !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_AddGlobalMessageRuleAction]
	@ruleID          nvarchar(100) = NULL,
	@actionID        nvarchar(100) = NULL,
	@description     nvarchar(400) = NULL,
	@actionType      int           = NULL,
	@actionData      image         = NULL
AS
BEGIN
	if(not exists(select * from lsGlobalMessageRuleActions where (RuleID = @ruleID AND ActionID = @actionID)))
	begin
		insert lsGlobalMessageRuleActions (RuleID,ActionID,Description,ActionType,ActionData) 
			values (@ruleID,@actionID,@description,@actionType,@actionData)

		select null as ErrorText
	end
	else
	begin
		select 'Action with specified ID "' + @actionID + '" already exists !' as ErrorText
	end
END


GO


/*   Implementation notes:
      Decsription:
	    Adds new user group
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that group ID won't exist already. Return error text.
        *) Ensure that group or user with specified name doesn't exist. Return error text.
        *) Add group.
		 
*/

CREATE PROCEDURE [dbo].[lspr_AddGroup]
	@groupID     nvarchar(100) = NULL,
	@groupName   nvarchar(100) = NULL,
	@description nvarchar(400) = NULL,
	@enabled     bit           = NULL
AS
BEGIN
	-- Ensure that group ID won't exist already. 
	if(exists(select * from lsGroups where (GroupID = @groupID)))
	begin
		select 'Invalid group ID, specified group ID ''' + @groupID + ''' already exists !' as ErrorText
		return;
	end

	-- Ensure that group name won't exist already.
	if(exists(select * from lsGroups where (GroupName = @groupName)))
	begin
		select 'Invalid group name, specified group ''' + @groupName + ''' already exists !' as ErrorText
		return;
	end
	-- Ensure that user name with groupName doen't exist.
	else if exists(select * from lsUsers where (UserName = @groupName))
	begin
		select 'Invalid group name, user with specified name ''' + @groupName + ''' already exists !' as ErrorText
		return;
	end
	
	-- Insert group
	insert lsGroups (GroupID,GroupName,Description,Enabled) 
		values (@groupID,@groupName,@description,@enabled)

	select null as ErrorText
END


GO


/*  Implementation notes:
      Decsription:
	    Adds new user group member.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that group exists. Return error text.
        *) Don't allow to add same group as group member. Return error text.
        *) Ensure that group member doesn't exist. Return error text.
        *) Add group member.
		 
*/

CREATE PROCEDURE [dbo].[lspr_AddGroupMember]
	@groupName   nvarchar(100) = NULL,
	@userOrGroup nvarchar(100) = NULL
AS
BEGIN	
	-- Ensure that group exists.
	if(not exists(select * from lsGroups where (GroupName = @groupName)))
	begin
		select 'Invalid group name, specified group ''' + @groupName + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Don't allow to add same group as group member.
	if(@groupName = @userOrGroup)
	begin
		select 'Invalid group member, can''t add goup itself as same group member !' as ErrorText
		return;
	end

	-- Get groupID
	declare @groupID as nvarchar(100)
	select @groupID = (select GroupID from lsGroups where (GroupName = @groupName))

	-- Ensure that group member doesn't exist.
	if(exists(select * from lsGroupMembers where (GroupID = @groupID AND UserOrGroup = @userOrGroup)))
	begin
		select 'Invalid group member, specified group member ''' + @userOrGroup + ''' already exists !' as ErrorText
		return;
	end
	
	-- Insert group member
	insert lsGroupMembers (GroupID,UserOrGroup) 
		values (@groupID,@userOrGroup)
	
	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_AddMailingList]
	@MailingListID	 varchar(100) = NULL,
	@MailingListName varchar(100) = NULL,
	@Description     varchar(100) = NULL,
	@DomainName      varchar(100) = NULL,
	@enabled         bit          = false
AS

set nocount on

if(not exists(select * from lsMailingLists where (MailingListID=@MailingListID)))
begin
	if(not exists(select * from lsMailingLists where (MailingListName=@MailingListName)))
	begin
		insert lsMailingLists (MailingListID,MailingListName,Description,DomainName,Enabled) 
		values (@MailingListID,@MailingListName,@Description,@DomainName,@enabled)

		select null as ErrorText
	end
	else
	begin
		select 'Mailing list with specified name "' + @MailingListName + '" already exists !' as ErrorText
	end
end
else
begin
	select 'Mailing list with specified ID "' + @MailingListID + '" already exists !' as ErrorText
end


GO


/*  Implementation notes:
      Decsription:
	    Mailing list ACL entry
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that mailing list exists.
        *) Ensure that user or group already doesn't exist in list.
        *) Add ACL entry.
		 
*/

CREATE PROCEDURE [dbo].[lspr_AddMailingListACL]
	@mailingListName nvarchar(100) = NULL,
	@userOrGroup     nvarchar(100) = NULL
AS
BEGIN
	-- Ensure that mailing list exists.
	if(not exists(select * from lsMailingLists where (MailingListName = @mailingListName)))
	begin
		select 'Invalid mailing list name, specified mailing list ''' + @mailingListName + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Get mailing list ID
	declare @mailingListID as nvarchar(100)
	select @mailingListID = (select MailingListID from lsMailingLists where (MailingListName = @mailingListName))
	
	-- Ensure that user or group already doesn't exist in list.
	if(exists(select * from lsMailingListACL where (MailingListID = @mailingListID AND UserOrGroup = @userOrGroup)))
	begin
		select 'Invalid userOrGroup, specified userOrGroup ''' + @userOrGroup + '''already exist !' as ErrorText
		return;
	end

	
	-- Insert group
	insert lsMailingListACL (MailingListID,UserOrGroup) 
		values (@mailingListID,@userOrGroup)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_AddMailingListAddress] 
	@AddressID       nvarchar(100) = NULL,
	@MailingListName nvarchar(100) = NULL,
	@Address         nvarchar(100) = NULL
AS

set nocount on

if(not exists(select * from lsMailingListAddresses where (AddressID=@AddressID)))
begin
	declare @MailingListID nvarchar(100)
	select @MailingListID = (select MailingListID from lsMailingLists where MailingListName=@MailingListName)

	if(not exists(select * from lsMailingListAddresses where (MailingListID=@MailingListID AND Address=@Address)))
	begin		
		insert lsMailingListAddresses (AddressID,MailingListID,Address) values (@AddressID,@MailingListID,@Address)

		select null as ErrorText
	end
	else
	begin
		select 'Mailing list address with specified name "' + @Address + '" already exists !' as ErrorText
	end
end
else
begin
	select 'Mailing list address with specified ID "' + @AddressID + '" already exists !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_AddRoute]
	@routeID     varchar(100) = NULL,
	@cost        bigint       = NULL,
	@enabled     bit          = NULL,
	@description varchar(100) = NULL,
	@pattern     varchar(100) = NULL,
	@action      int          = NULL,
	@actionData  image        = NULL
AS

set nocount on

if(not exists(select * from lsRouting where (RouteID=@routeID)))
begin
	if(not exists(select * from lsRouting where (Pattern=@pattern)))
	begin
		insert lsRouting (RouteID,Cost,Enabled,Description,Pattern,Action,ActionData) 
		values (@routeID,@cost,@enabled,@description,@pattern,@action,@actionData)

		select null as ErrorText
	end
	else
	begin
		select 'Route with specified pattern "' + @Pattern + '" already exists !' as ErrorText
	end
end
else
begin
	select 'Route with specified ID "' + @RouteID + '" already exists !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_AddSecurityEntry]
	@id          varchar(100) = NULL,
	@enabled     bit          = 1,
	@description varchar(100) = NULL,
	@service     varchar(100) = NULL,
	@action      varchar(100) = NULL,
	@startIP     varchar(100) = NULL,
	@endIP       varchar(100) = NULL
AS

set nocount on

if(not exists(select * from lsIPSecurity where (ID=@id)))
begin
	insert lsIPSecurity (ID,Enabled,Description,Service,Action,StartIP,EndIP) 
	values (@id,@enabled,@Description,@service,@action,@startIP,@endIP)

	select null as ErrorText
end
else
begin
	select 'Security entry with specified ID "' + @id + '" already exists !' as ErrorText
end


GO


/*  Implementation notes:
      Decsription:
	    Adds new shared folder root.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that root doesn't exists.
        *) Add root folder.
		 
*/

CREATE PROCEDURE [dbo].[lspr_AddSharedFolderRoot]
	@rootID        nvarchar(100) = NULL,
	@enabled       bit           = NULL,
	@folder        nvarchar(400) = NULL,
	@description   nvarchar(400) = NULL,
	@rootType      int           = NULL,
	@boundedUser   nvarchar(100) = NULL,
	@boundedFolder nvarchar(400) = NULL
AS
BEGIN
	-- Ensure that root ID won't exist already. 
	if(exists(select * from lsSharedFoldersRoots where (RootID = @rootID)))
	begin
		select 'Invalid root ID, specified root ID ''' + @rootID + ''' already exists !' as ErrorText
		return;
	end

	-- Ensure that root folder name won't exist already.
	if(exists(select * from lsSharedFoldersRoots where (Folder = @folder)))
	begin
		select 'Invalid root folder name, specified folder ''' + @folder + ''' already exists !' as ErrorText
		return;
	end
	
	-- Insert root folder
	insert lsSharedFoldersRoots (RootID,Enabled,Folder,Description,RootType,BoundedUser,BoundedFolder) 
		values (@rootID,@enabled,@folder,@description,@rootType,@boundedUser,@boundedFolder)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_AddUser]
	@UserID	     varchar(100) = NULL,
	@FullName    varchar(100) = NULL,
	@UserName    varchar(100) = NULL,
	@Password    varchar(100) = NULL,
	@Description varchar(100) = NULL,
	@DomainName  varchar(100) = NULL,
	@MailboxSize bigint	  = 0,
	@Enabled     bit          = true,
	@permissions int          = 255
AS

set nocount on

if(not exists(select * from lsUsers where (UserID=@UserID)))
begin
	if(not exists(select * from lsUsers where (UserName=@UserName)))
	begin
		insert lsUsers (UserID,FullName,UserName,Password,Description,Mailbox_Size,DomainName,Enabled,[Permissions],CreationTime) 
		values (@UserID,@FullName,@UserName,@Password,@Description,@MailboxSize,@DomainName,@Enabled,@permissions,getdate())

		select null as ErrorText
	end
	else
	begin
		select 'User with specified name "' + @UserName + '" already exists !' as ErrorText
	end
end
else
begin
	select 'User with specified ID "' + @UserID + '" already exists !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_AddUserAddress]
	@UserName  nvarchar(100) = NULL,
	@Address   nvarchar(100) = NULL
AS

set nocount on
BEGIN
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	if(not exists(select * from lsUserAddresses where (UserID=@UserID AND Address=@Address)))
	begin
		insert lsUserAddresses (UserID,Address) values (@UserID,@Address)

		select null as ErrorText
	end
	else
	begin
		select 'User address with specified name "' + @Address + '" already exists !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_AddUserMessageRule]
	@userID          nvarchar(100) = NULL,
	@ruleID          nvarchar(100) = NULL,
	@cost            bigint        = NULL,
	@enabled         bit           = NULL,
	@checkNextRule   int           = NULL,
	@description     nvarchar(400) = NULL,
	@matchExpression image         = NULL
AS
BEGIN
	if(not exists(select * from lsUserMessageRules where (RuleID = @ruleID)))
	begin
		insert lsUserMessageRules (UserID,RuleID,Cost,Enabled,CheckNextRuleIf,Description,MatchExpression) 
			values (@userID,@ruleID,@cost,@enabled,@checkNextRule,@description,@matchExpression)

		select null as ErrorText
	end
	else
	begin
		select 'Rule with specified ID "' + @ruleID + '" already exists !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_AddUserMessageRuleAction]
	@userID          nvarchar(100) = NULL,
	@ruleID          nvarchar(100) = NULL,
	@actionID        nvarchar(100) = NULL,
	@description     nvarchar(400) = NULL,
	@actionType      int           = NULL,
	@actionData      image         = NULL
AS
BEGIN
	if(not exists(select * from lsUserMessageRuleActions where (RuleID = @ruleID AND ActionID = @actionID)))
	begin
		insert lsUserMessageRuleActions (UserID,RuleID,ActionID,Description,ActionType,ActionData) 
			values (@userID,@ruleID,@actionID,@description,@actionType,@actionData)

		select null as ErrorText
	end
	else
	begin
		select 'Action with specified ID "' + @actionID + '" already exists !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_AddUserRemoteServer] 
	@ServerID       nvarchar(100) = NULL,
	@UserName       nvarchar(100) = NULL,
	@Description    nvarchar(100) = NULL,
	@RemoteServer   nvarchar(100) = NULL,
	@RemotePort     int           = NULL,
	@RemoteUserName nvarchar(100) = NULL,
	@RemotePassword nvarchar(100) = NULL,
	@UseSSL         bit           = NULL,
	@Enabled        bit           = NULL
AS

set nocount on

if(not exists(select * from lsUserRemoteServers where (ServerID=@ServerID)))
begin
	-- Get userID
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	insert lsUserRemoteServers (
		ServerID,
		UserID,
		Description,
		RemoteServer,
		RemotePort,
		RemoteUserName,
		RemotePassword,
		UseSSL,
		Enabled
	) 
	values (
		@ServerID,
		@UserID,
		@Description,
		@RemoteServer,
		@RemotePort,
		@RemoteUserName,
		@RemotePassword,
		@UseSSL,
		@Enabled
	)

	select null as ErrorText
end
else
begin
	select 'User remote server with specified ID "' + @ServerID + '" already exists !' as ErrorText
end


GO


/* Adds users default folder.
    @folderName - Users default folder name.
    @permanent  - Specifies if folder is permanent, users can't delete it.
*/
CREATE PROCEDURE [dbo].[lspr_AddUsersDefaultFolder] 
    @folderName nvarchar(200),
    @permanent  bit
AS

IF(exists(select * from lsUsersDefaultFolders where (FolderName = @folderName)))
BEGIN
    select 'Users default folder with specified name ''' + @folderName + ''' already exists !' as ErrorText
    return;
END

insert into lsUsersDefaultFolders (FolderName,Permanent)
    values (@folderName,@permanent)

select null as ErrorText


GO


CREATE PROCEDURE [dbo].[lspr_CreateFolder] 
	@UserName nvarchar(100),
	@Folder   nvarchar(100)
AS


declare @UserID as uniqueidentifier
select @UserID = (select UserID from lsUsers where UserName = @UserName)

if exists(select * from  lsIMAPFolders where UserID = @UserID AND FolderName = @Folder)
begin
	select 'Folder(' + @Folder  + ') already exists' as ErrorText
end
else
begin
	insert into lsIMAPFolders (UserID,FolderName,CreationTime) values (@UserID,@Folder,getdate())
end


GO


CREATE PROCEDURE [dbo].[lspr_DeleteDomain]
	@DomainID nvarchar(100) = NULL
AS

declare @DomainName nvarchar(100)
select @DomainName = (select DomainName from lsDomains where DomainID = @DomainID)

--- Delete domain users ---------------------------------------------------------
declare rsUsers cursor for select UserID from lsUsers where DomainName=@DomainName
open rsUsers

declare @UserID nvarchar(100)
fetch next from  rsUsers into @UserID
while(@@FETCH_STATUS = 0)
begin
	exec lspr_DeleteUser @UserID=@UserID
	-- Get next data row
	fetch next from  rsUsers into @UserID
end
close rsUsers
deallocate rsUsers
---------------------------------------------------------------------------------

--- Delete domain mailing lists --------------------------------------------------
declare rsMailingLists cursor for select MailingListID from lsMailingLists where DomainName=@DomainName
open rsMailingLists

declare @MailingListID nvarchar(100)
fetch next from  rsMailingLists into @MailingListID
while(@@FETCH_STATUS = 0)
begin
	exec lspr_DeleteMailingList @MailingListID=@MailingListID
	-- Get next data row
	fetch next from  rsMailingLists into @MailingListID
end
close rsMailingLists
deallocate rsMailingLists
---------------------------------------------------------------------------------

delete from lsDomains where DomainID=@DomainID


GO


CREATE PROCEDURE [dbo].[lspr_DeleteFilter]
	@FilterID nvarchar(100) = NULL
AS

delete from lsFilters where (FilterID=@FilterID)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteFolder] 
	@UserName nvarchar(100),
	@Folder   nvarchar(100)
AS

declare @UserID as uniqueidentifier
select @UserID = (select UserID from lsUsers where UserName = @UserName)

if exists(select * from  lsIMAPFolders where UserID = @UserID AND FolderName = @Folder)
begin
	-- Delete specified folder and it's subfolders messages
	delete lsMailStore where (Mailbox = @UserName AND Folder LIKE (@Folder + '%'))

	-- Delete folder and it's sub folders
	delete lsIMAPFolders where (UserID = @UserID AND FolderName LIKE (@Folder + '%'))

	-- Delete specified folder and it's subfolders ACL, if any
	delete lsIMAP_ACL where (Folder LIKE (@UserName + '/' + @Folder + '%'))
end
else
begin
	select 'Folder(' + @Folder  + ') doesn''t exist' as ErrorText	
end


GO


CREATE PROCEDURE [dbo].[lspr_DeleteFolderACL]
	@FolderName nvarchar(500) = NULL,
	@UserName   nvarchar(500) = NULL
AS

delete from lsIMAP_ACL where (Folder = @FolderName AND [User] = @UserName)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteGlobalMessageRule]
	@ruleID nvarchar(100) = NULL
AS
BEGIN
	-- Delete all specified rule Actions
	delete from lsGlobalMessageRuleActions where (RuleID = @ruleID)

	delete from lsGlobalMessageRules where (RuleID = @ruleID)
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteGlobalMessageRuleAction]
	@ruleID   nvarchar(100) = NULL,
	@actionID nvarchar(100) = NULL
AS
BEGIN
	delete from lsGlobalMessageRuleActions where (RuleID = @ruleID AND ActionID = @actionID)
END


GO


/*  Implementation notes:
      Decsription:
	    Deletes user group
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that group ID exist. Return error text.
        *) Delete group members.
        *) Delete group.
		 
*/

CREATE PROCEDURE [dbo].[lspr_DeleteGroup]
	@groupID     nvarchar(100) = NULL
AS
BEGIN
	-- Ensure that group ID exist.
	if(not exists(select * from lsGroups where (GroupID = @groupID)))
	begin
		select 'Invalid group ID, specified group ID ''' + @groupID + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Delete group members.
	delete from lsGroupMembers where (GroupID = @groupID)

	-- Delete group.
	delete from lsGroups where (GroupID = @groupID)

	select null as ErrorText
END


GO


/*  Implementation notes:
      Decsription:
	    Deletes user group member
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that group exists. Return error text.
        *) Ensure that group member does exist. Return error text.
        *) Delete group member.
		 
*/

CREATE PROCEDURE [dbo].[lspr_DeleteGroupMember]
	@groupName   nvarchar(100) = NULL,
	@userOrGroup nvarchar(100) = NULL
AS
BEGIN
	-- Ensure that group exists.
	if(not exists(select * from lsGroups where (GroupName = @groupName)))
	begin
		select 'Invalid group name, specified group ''' + @groupName + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Ensure that group member does exist.
	if(not exists(select * from lsGroupMembers where (UserOrGroup = @userOrGroup)))
	begin
		select 'Invalid group member, specified group member ''' + @userOrGroup + ''' already exists !' as ErrorText
		return;
	end

	-- Delete group members.
	delete from lsGroupMembers where (UserOrGroup = @userOrGroup)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteMailingList]
	@MailingListID	nvarchar(100) = NULL
AS

delete from lsMailingListAcl where (MailingListID=@MailingListID)
delete from lsMailingListAddresses where (MailingListID=@MailingListID)
delete from lsMailingLists where (MailingListID=@MailingListID)


GO


/*  Implementation notes:
      Decsription:
	    Deletes specified mailing list ACL entry.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that mailing list exists.
        *) Delete ACL entry.
		 
*/

CREATE PROCEDURE [dbo].[lspr_DeleteMailingListACL]
	@mailingListName nvarchar(100) = NULL,
	@userOrGroup     nvarchar(100) = NULL
AS
BEGIN
	-- Ensure that mailing list exists.
	if(not exists(select * from lsMailingLists where (MailingListName = @mailingListName)))
	begin
		select 'Invalid mailing list name, specified mailing list ''' + @mailingListName + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Get mailing list ID
	declare @mailingListID as nvarchar(100)
	select @mailingListID = (select MailingListID from lsMailingLists where (MailingListName = @mailingListName))

	-- Delete ACL entry.
	delete from lsMailingListACL where (MailingListID = @mailingListID AND UserOrGroup = @userOrGroup)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteMailingListAddress]
	@AddressID nvarchar(100) = NULL
AS

delete from lsMailingListAddresses where (AddressID=@AddressID)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteMessage] 
    @MessageID uniqueidentifier = NULL,
    @Mailbox   nvarchar(100)    = NULL,
    @Folder    nvarchar(100)    = NULL
AS
BEGIN
    delete from lsMailStore 
        where MessageID = @MessageID AND Mailbox = @Mailbox AND Folder = @Folder
END


GO


/* Deletes specified recycle bin message.
    @messageID - Message ID which to delete.
*/
CREATE PROCEDURE [dbo].[lspr_DeleteRecycleBinMessage]
	@messageID nvarchar(100) = NULL
AS
BEGIN
	delete from lsRecycleBin where(MessageID = @messageID)
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteRoute]
	@RouteID nvarchar(100) = NULL
AS

delete from lsRouting where (RouteID=@RouteID)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteSecurityEntry]
	@SecurityID nvarchar(100) = NULL
AS

delete from lsIPSecurity where (ID=@SecurityID)


GO


/*	Implementation notes:
      Decsription:
	    Deletes shared folder root.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that root ID exist. Return error text.
        *) Delete root folder.
		 
*/

CREATE PROCEDURE [dbo].[lspr_DeleteSharedFolderRoot]
	@rootID nvarchar(100) = NULL
AS
BEGIN
	-- Ensure that root ID exist.
	if(not exists(select * from lsSharedFoldersRoots where (RootID = @rootID)))
	begin
		select 'Invalid root ID, specified root ID ''' + @rootID + ''' doesn''t exist !' as ErrorText
		return;
	end

	-- Delete group.
	delete from lsSharedFoldersRoots where (RootID = @rootID)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteUser]
	@UserID	nvarchar(100) = NULL
AS

delete from lsUserAddresses where (UserID=@UserID)
delete from lsUserRemoteServers where (UserID=@UserID)
delete from lsUserMessageRules where (UserID=@UserID)
delete from lsIMAPSubscribedFolders where (UserID=@UserID)
delete from lsUsers where (UserID=@UserID)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteUserAddress]
	@emailAddress nvarchar(100) = NULL
AS

delete from lsUserAddresses where (Address = @emailAddress)


GO


CREATE PROCEDURE [dbo].[lspr_DeleteUserMessageRule]
	@userID nvarchar(100) = NULL,
	@ruleID nvarchar(100) = NULL
AS
BEGIN
	-- Delete all specified rule Actions
	delete from lsUserMessageRuleActions where (UserID = @userID AND RuleID = @ruleID)

	delete from lsUserMessageRules where (UserID = @userID AND RuleID = @ruleID)
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteUserMessageRuleAction]
	@userID   nvarchar(100) = NULL,
	@ruleID   nvarchar(100) = NULL,
	@actionID nvarchar(100) = NULL
AS
BEGIN
	delete from lsUserMessageRuleActions where (UserID = @userID AND RuleID = @ruleID AND ActionID = @actionID)
END


GO


CREATE PROCEDURE [dbo].[lspr_DeleteUserRemoteServer]
	@ServerID nvarchar(100) = NULL
AS

delete from lsUserRemoteServers where (ServerID=@ServerID)


GO


/* Deletes users default folder.
    @folderName - Users default folder name which to delete.
*/
CREATE PROCEDURE [dbo].[lspr_DeleteUsersDefaultFolder]
	@folderName nvarchar(200)
AS
BEGIN
	-- Ensure that folder exist.
	if(not exists(select * from lsUsersDefaultFolders where (FolderName = @folderName)))
	begin
		select 'Users default folder with specified name ''' + @folderName + ''' doesn''t exists !' as ErrorText
		return;
	end

	-- Delete folder.
	delete from lsUsersDefaultFolders where (FolderName = @folderName)

	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_DomainExists]
	@DomainName nvarchar(100) = NULL
AS

select * from lsDomains where (DomainName=@DomainName)


GO


CREATE PROCEDURE [dbo].[lspr_FolderExists]
	@FolderName nvarchar(500) = NULL,
	@UserName   nvarchar(100) = NULL
AS

if(exists (select * from lsIMAPFolders where (UserID=(select UserID from lsUsers where UserName = @UserName)  AND FolderName = @FolderName)))
begin 
	select * from lsIMAPFolders where (UserID=(select UserID from lsUsers where UserName = @UserName)  AND FolderName = @FolderName)
end
else
begin
	if(lower(@FolderName) = 'inbox')
	begin
		-- Create inbox, it's missing
		exec lspr_CreateFolder @UserName,'Inbox'

		select * from lsIMAPFolders where (UserID=(select UserID from lsUsers where UserName = @UserName)  AND FolderName = @FolderName)
	end
end


GO

CREATE PROCEDURE [dbo].[lspr_GetDomains]  
AS

select * from lsDomains


GO


CREATE PROCEDURE [dbo].[lspr_GetFilters]
AS

select * from lsFilters


GO


CREATE PROCEDURE [dbo].[lspr_GetFolderACL] 
	@FolderName nvarchar(500) = NULL
AS

if(@FolderName is not null)
begin
	select * from lsIMAP_ACL where (Folder = @FolderName)
end
else
begin
	select * from lsIMAP_ACL
end


GO


CREATE PROCEDURE [dbo].[lspr_GetFolders] 
	@UserName as nvarchar(100)
AS

if(exists (select * from lsIMAPFolders where UserID=(select UserID from lsUsers where UserName = @UserName)))
begin 
	select * from lsIMAPFolders where UserID=(select UserID from lsUsers where UserName = @UserName)
end
else
begin
	-- Create inbox, it's missing
	exec lspr_CreateFolder @UserName,'Inbox'

	select 'Inbox' as FolderName
end


GO


CREATE PROCEDURE [dbo].[lspr_GetGlobalMessageRuleActions]
	@ruleID nvarchar(100) = NULL
AS
BEGIN
	select * from lsGlobalMessageRuleActions where (RuleID = @ruleID)
END


GO


CREATE PROCEDURE [dbo].[lspr_GetGlobalMessageRules]
AS
BEGIN
	select * from lsGlobalMessageRules order by Cost ASC
END


GO


/*  Implementation notes:
      Decsription:
	     Gets user group members.
	  Returns:
		 Retruns user group members.
*/

CREATE PROCEDURE [dbo].[lspr_GetGroupMembers]
	@groupName   nvarchar(100) = NULL	
AS
BEGIN
	-- Get groupID
	declare @groupID as nvarchar(100)
	select @groupID = (select GroupID from lsGroups where (GroupName = @groupName))

	select * from lsGroupMembers where (GroupID = @groupID)
END


GO


/*  Implementation notes:
      Decsription:
	     Gets user groups.
	  Returns:
		 Retruns user groups.
*/

CREATE PROCEDURE [dbo].[lspr_GetGroups]	
AS
BEGIN
	select * from lsGroups
END


GO


CREATE PROCEDURE [dbo].[lspr_GetMailboxSize]
	@UserName nvarchar(100) = NULL
AS

set nocount on

declare @Size int
select  @Size = 0

-- Count mailbox size
if(exists(select MailBox from lsMailStore where Mailbox=@UserName))
begin
    select @Size = (select sum(Size) from lsMailStore where Mailbox=@UserName)
end

select @Size as MailboxSize


GO


/*  Implementation notes:
      Decsription:
	     Gets mailing list ACL list.
	  Returns:
		 Retruns mailing list ACL list.
*/

CREATE PROCEDURE [dbo].[lspr_GetMailingListACL]	
	@mailingListName as nvarchar(100)
AS
BEGIN
	select * from lsMailingListACL 
		where (MailingListID = (select MailingListID from lsMailingLists where (MailingListName = @mailingListName)))
END


GO


CREATE PROCEDURE [dbo].[lspr_GetMailingListAddresses]
	@MailingListName nvarchar(100) = NULL
AS

if(@MailingListName is not null)
begin
	declare @MailingListID nvarchar(100)
	select @MailingListID = (select MailingListID from lsMailingLists where MailingListName=@MailingListName)

	select * from lsMailingListAddresses where (MailingListID=@MailingListID)
end
else
begin
       select * from lsMailingListAddresses
end


GO


CREATE PROCEDURE [dbo].[lspr_GetMailingListProperties]
	@MailingListName nvarchar(100)	= NULL
AS

select * from lsMailingLists where (MailingListName = @MailingListName)


GO


CREATE PROCEDURE [dbo].[lspr_GetMailingLists]
	@DomainName nvarchar(100) = NULL
AS

if(@DomainName is not null)
begin
      select * from lsMailingLists where (DomainName=@DomainName)
end
else
begin
       select * from lsMailingLists
end


GO


CREATE PROCEDURE [dbo].[lspr_GetMessage]
	@MessageID uniqueidentifier = NULL,
	@Mailbox   nvarchar(100)    = NULL,
	@Folder    nvarchar(100)    = NULL
AS

select Data from lsMailStore where MessageID = @MessageID AND Mailbox = @Mailbox AND Folder = @Folder


GO


CREATE PROCEDURE [dbo].[lspr_GetMessageInfo]
	@Mailbox nvarchar(100)= NULL,
	@Folder	 nvarchar(100)= NULL
AS

select MessageID,Size,Date,MessageFlags,UID  from lsMailStore where MAILBOX = @Mailbox AND Folder = @Folder


GO


CREATE PROCEDURE [dbo].[lspr_GetMessageTopLines]
	@MessageID uniqueidentifier = NULL,
	@Mailbox   nvarchar(100)    = NULL,
	@Folder    nvarchar(100)    = NULL
AS
BEGIN
	select TopLines from lsMailStore where MessageID = @MessageID AND  Mailbox = @Mailbox AND Folder = @Folder
END


GO


/* Gets recycle bin message.
    @messageID - Recycle bin message ID.
*/
CREATE PROCEDURE [dbo].[lspr_GetRecycleBinMessage]
    @messageID uniqueidentifier = NULL
AS
BEGIN
	select * from lsRecycleBin where (MessageID = @messageID)
END


GO


/* Gets reycle bin messages info.
    @userName  - User who's recyclebin messages to get or null if all users messages.
    @startDate - Messages from specified date.
    @endDate   - Messages to specified date.
*/
CREATE PROCEDURE [dbo].[lspr_GetRecycleBinMessagesInfo]
    @userName  nvarchar(200) = NULL,
    @startDate datetime,
    @endDate   datetime
AS
BEGIN
    IF @userName is null
    BEGIN
        select MessageID,DeleteTime,[User],Folder,[Size],Envelope from lsRecycleBin where(@startDate <= CONVERT(varchar(8),DeleteTime,112) AND @endDate >= CONVERT(varchar(8),DeleteTime,112))
    END
    ELSE
    BEGIN
        select MessageID,DeleteTime,[User],Folder,[Size],Envelope from lsRecycleBin where([User] = @userName AND @startDate <= CONVERT(varchar(8),DeleteTime,112) AND @endDate >= CONVERT(varchar(8),DeleteTime,112))
    END
END


GO


/* Gets recycle bin settings.
*/
CREATE PROCEDURE [dbo].[lspr_GetRecycleBinSettings]	
AS
BEGIN
	select * from lsRecycleBinSettings
END


GO


CREATE PROCEDURE [dbo].[lspr_GetRoutes]
AS
begin

select * from lsRouting

end


GO


CREATE PROCEDURE [dbo].[lspr_GetSecurityList]
AS

select * from lsIPSecurity


GO


CREATE PROCEDURE [dbo].[lspr_GetSettings]  
AS

select * from lsSettings


GO


/*  Implementation notes:
      Decsription:
	     Gets shared root folders.
	  Returns:
		 Retruns shared root folders.
*/

CREATE PROCEDURE [dbo].[lspr_GetSharedFolderRoots]	
AS
BEGIN
	select * from lsSharedFoldersRoots
END


GO


CREATE PROCEDURE [dbo].[lspr_GetSubscribedFolders] 
	@UserName as nvarchar(100)
AS

select * from lsIMAPSubscribedFolders where UserID=(select UserID from lsUsers where UserName = @UserName)


GO


CREATE PROCEDURE [dbo].[lspr_GetUserAddresses]
	@UserName nvarchar(100) = NULL
AS

if(@UserName is not null)
begin
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	select * from lsUserAddresses where (UserID=@UserID)
end
else
begin
       select * from lsUserAddresses
end


GO


CREATE PROCEDURE [dbo].[lspr_GetUserMessageRuleActions]
	@userID nvarchar(100) = NULL,
	@ruleID nvarchar(100) = NULL
AS
BEGIN
	select * from lsUserMessageRuleActions where (UserID = @userID AND RuleID = @ruleID)
END


GO


CREATE PROCEDURE [dbo].[lspr_GetUserMessageRules]
	@UserName nvarchar(100) = NULL
AS

if(@UserName is not null)
begin
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	select * from lsUserMessageRules where (UserID=@UserID)
end
else
begin
	select * from lsUserMessageRules
end


GO


CREATE PROCEDURE [dbo].[lspr_GetUserProperties]
	@UserName nvarchar(100)	= NULL
AS

select * from lsUsers where (UserName = @UserName)


GO


CREATE PROCEDURE [dbo].[lspr_GetUserRemoteServers]
	@UserName nvarchar(100) = NULL
AS

if(@UserName is not null)
begin
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	select * from lsUserRemoteServers where (UserID=@UserID)
end
else
begin
	select * from lsUserRemoteServers
end


GO


CREATE PROCEDURE [dbo].[lspr_GetUsers]
	@DomainName nvarchar(100) = NULL
AS

if(@DomainName is not null)
begin
      select * from lsUsers where (DomainName=@DomainName)
end
else
begin
       select * from lsUsers
end


GO


/*  Implementation notes:
      Decsription:
	     Gets users default folders.
	  Returns:
		 Retruns users default folders.
*/

CREATE PROCEDURE [dbo].[lspr_GetUsersDefaultFolders]	
AS
BEGIN
	select * from lsUsersDefaultFolders
END


GO


/*  Implementation notes:
      Decsription:
	     Checks if specified user group exists.
	  Returns:
		 Retruns specified group if it exists.
*/

CREATE PROCEDURE [dbo].[lspr_GroupExists]
	@groupName nvarchar(100) = NULL
AS
BEGIN
	select * from lsGroups where (GroupName = @groupName)
END


GO


/*	Implementation notes:
      Decsription:
	     Checks if specified user group member exists.
	  Returns:
		 Retruns specified group member if it exists.
*/

CREATE PROCEDURE [dbo].[lspr_GroupMemberExists]
	@groupName   nvarchar(100) = NULL,
	@userOrGroup nvarchar(100) = NULL
AS
BEGIN
	-- Get groupID
	declare @groupID as nvarchar(100)
	select @groupID = (select GroupID from Groups where (GroupName = @groupName))

	select * from lsGroupMembers where (GroupID = @groupID AND UserOrGroup = @userOrGroup)
END


GO


CREATE PROCEDURE [dbo].[lspr_MapUser]
	@EmailAddress nvarchar(100) = NULL
AS

declare @UserID nvarchar(100)
select @UserID = (select UserID from lsUserAddresses where Address=@EmailAddress)

select UserName from lsUsers where (UserID=@UserID)


GO


CREATE PROCEDURE [dbo].[lspr_RenameFolder] 
	@UserName  nvarchar(100),
	@Folder    nvarchar(100),
	@NewFolder nvarchar(100)
AS

declare @UserID as uniqueidentifier
select @UserID = (select UserID from lsUsers where UserName = @UserName)

-- Check if destination folder exists
if exists(select * from  lsIMAPFolders where UserID = @UserID AND FolderName = @NewFolder)
begin
	select 'Destination Folder(' + @Folder  + ') already exists' as ErrorText
	return
end

if exists(select * from  lsIMAPFolders where UserID = @UserID AND FolderName = @Folder)
begin
	-- Rename mail store folder and it's subfolders
	update lsMailStore  set 
		Folder = (@NewFolder + substring(Folder,len(@Folder) + 1,len(Folder) - len(@Folder)))
	where (Mailbox = @UserName AND Folder LIKE (@Folder + '%'))

	-- Rename folder and it's subfolders
	update lsIMAPFolders  set 
		FolderName = (@NewFolder + substring(FolderName,len(@Folder) + 1,len(FolderName) - len(@Folder)))
	where (UserID = @UserID AND FolderName LIKE (@Folder + '%'))

	-- Rename folder and it's subfolders ACL
	update lsIMAP_ACL  set 
		Folder = (@UserName + '/' + @NewFolder + substring(Folder,len(@UserName + '/' + @Folder) + 1,len(Folder) - len(@UserName + '/' + @NewFolder) + 1)) 
	where (Folder LIKE (@UserName + '/' + @Folder + '%'))
end
else
begin
	select 'Source Folder(' + @Folder  + ') doesn''t exists' as ErrorText	
end


GO


CREATE PROCEDURE [dbo].[lspr_SetFolderACL]
	@FolderName  nvarchar(500) = NULL,
	@UserName    nvarchar(500) = NULL,
	@Permissions nvarchar(20)  = ''
AS

if(exists(select * from lsIMAP_ACL where (Folder = @FolderName AND [User] = @UserName)))
begin
	update lsIMAP_ACL set 
		[Permissions] = @Permissions
	where  (Folder = @FolderName AND [User] = @UserName)
end
else
begin
	insert lsIMAP_ACL (Folder,[User],[Permissions]) 
	values (@FolderName,@UserName,@Permissions)
end


GO


CREATE PROCEDURE [dbo].[lspr_StoreMessage]
	@Mailbox       nvarchar(100) = NULL,
	@Folder        nvarchar(100) = NULL,
	@Data          image         = NULL,
	@Size          bigint        = 0,
	@TopLines      image         = NULL,
	@Date          DateTime	     = NULL,
	@MessageFlags int            = 0
AS

if(not exists (select * from lsIMAPFolders where UserID=(select UserID from lsUsers where UserName = @Mailbox)))
begin 
	if(lower(@Folder) = 'inbox')
	begin
		declare @UserID as nvarchar(100)
		select @UserID = (select UserID from lsUsers where UserName = @Mailbox);

		insert into lsIMAPFolders (UserID,FolderName) values (@UserID,'Inbox')
	end
	else
	begin
		select ('Folder ' + @Folder + ' doesn''t exist') as ErrorText
		return;
	end
end

insert lsMailStore (MessageID,Mailbox,Folder,Data,Size,TopLines,Date,MessageFlags) values (newid(),@Mailbox,@Folder,@Data,@Size,@TopLines,@Date,@MessageFlags)


GO


CREATE PROCEDURE [dbo].[lspr_StoreMessageFlags]
	@MessageID    uniqueidentifier = NULL,
	@Mailbox      nvarchar(100)    = NULL,
	@Folder       nvarchar(100)    = NULL,
	@MessageFalgs int              = NULL
AS

Update lsMailStore set MessageFlags = @MessageFalgs where MessageID = @MessageID AND Mailbox = @Mailbox AND Folder = @Folder


GO


/* Stores specified message to recycel bin.
    @messageID - Recycle bin message ID.
    @user      - User whos messge it is.
    @folder    - Original folder that contained message.
    @size      - Message size in bytes.
    @envelope  - Message IMAP Envelop string.
    @data      - Message data.
*/
CREATE PROCEDURE [dbo].[lspr_StoreRecycleBinMessage]
    @messageID nvarchar(100)  = NULL,
    @user      nvarchar(200)  = NULL,
    @folder    nvarchar(500)  = NULL,
	@size      bigint         = 0,
    @envelope  nvarchar(2000) = NULL,
    @data      image          = NULL
AS
BEGIN
    insert into lsRecycleBin (MessageID,DeleteTime,[User],Folder,[Size],Envelope,Data)
        values(@messageID,getdate(),@user,@folder,@size,@envelope,@data)
END


GO


CREATE PROCEDURE [dbo].[lspr_SubscribeFolder] 
	@UserName nvarchar(100),
	@Folder   nvarchar(100)
AS

-- ToDo: check if exist, delete or just skip ???

declare @UserID as uniqueidentifier
select @UserID = (select UserID from lsUsers where UserName = @UserName)

insert into lsIMAPSubscribedFolders (UserID,FolderName) values (@UserID,@Folder)


GO


CREATE PROCEDURE [dbo].[lspr_UnSubscribeFolder] 
	@UserName nvarchar(100),
	@Folder   nvarchar(100)
AS

declare @UserID as uniqueidentifier
select @UserID = (select UserID from lsUsers where UserName = @UserName)

delete  lsIMAPSubscribedFolders where UserID =  @UserID AND FolderName = @Folder


GO


CREATE PROCEDURE [dbo].[lspr_UpdateDomain]
    @DomainID    nvarchar(100) = NULL,
    @DomainName  nvarchar(100) = NULL,
    @Description nvarchar(100) = NULL
AS

set nocount on

-- Ensure that domain with specified ID exists
IF(not exists(select * from lsDomains where (DomainID = @DomainID)))
BEGIN
    select 'Specified @DomainID "' + @DomainID + '" doesn''t exists !' as ErrorText
    return;
END

-- Ensure that another domain haven't same domain name
IF(exists(select * from lsDomains where (DomainID != @DomainID AND DomainName = @DomainName)))
BEGIN
    select 'Domain with specified name "' + @DomainName + '" already exists !' as ErrorText
    return;
END

-- If domain name changed, rename user addresses and mailing lists
declare @oldDomainName varchar(200)
select @oldDomainName = (select DomainName from lsDomains where (DomainID = @DomainID))

IF(lower(@oldDomainName) != lower(@DomainName))
BEGIN
    -- Rename user addresses
    update lsUserAddresses set
        Address = substring(Address,0,len(Address) - len(@oldDomainName) + 1) + @DomainName
    where(Address LIKE ('%@' + @oldDomainName))

    -- Rename mailing lists
    update lsMailingLists set
        MailingListName = substring(MailingListName,0,len(MailingListName) - len(@oldDomainName) + 1) + @DomainName
    where(MailingListName LIKE ('%@' + @oldDomainName)) 
END

update lsDomains set 
    DomainName  = @DomainName,
    Description = @Description
where (DomainiD = @DomainID)

select null as ErrorText


GO


CREATE PROCEDURE [dbo].[lspr_UpdateFilter]
	@FilterID    nvarchar(100) = NULL,
	@Description nvarchar(100) = NULL,
	@Type        nvarchar(100) = NULL,
	@Assembly    nvarchar(100) = NULL,
	@ClassName   nvarchar(100) = NULL,
	@Cost        bigint        = 0,
	@Enabled     bit           = true
AS

if(exists(select * from lsFilters where (FilterID=@FilterID)))
begin
	update lsFilters set 
		Description = @Description,
		Type        = @Type,
		Assembly    = @Assembly,
		ClassName   = @ClassName,
		Cost        = @Cost,
		Enabled     = @Enabled
	where  (FilterID=@FilterID)

	select null as ErrorText
end
else
begin
	select 'Filter with specified ID "' + @FilterID + '" doesn''t exist !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_UpdateGlobalMessageRule]
	@ruleID          nvarchar(100) = NULL,
	@cost            bigint        = NULL,
	@enabled         bit           = NULL,
	@checkNextRule   int           = NULL,
	@description     nvarchar(400) = NULL,
	@matchExpression image         = NULL
AS
BEGIN
	if(exists(select * from lsGlobalMessageRules where (RuleID = @ruleID)))
    begin
		update lsGlobalMessageRules set
			RuleID          = @ruleID,
			Cost            = @cost,
			Enabled         = @enabled,
			CheckNextRuleIf = @checkNextRule,
			Description     = @description,
			MatchExpression = @matchExpression
		where  (RuleID = @ruleID)

		select null as ErrorText
    end
    else
	begin
		select 'Rule with specified ID "' + @ruleID + '" doesn''t exist !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateGlobalMessageRuleAction]
	@ruleID          nvarchar(100) = NULL,
	@actionID        nvarchar(100) = NULL,
	@description     nvarchar(400) = NULL,
	@actionType      int           = NULL,
	@actionData      image         = NULL
AS
BEGIN
	if(exists(select * from lsGlobalMessageRuleActions where (RuleID = @ruleID AND ActionID = @ActionID)))
    begin
		update lsGlobalMessageRuleActions set
			RuleID      = @ruleID,
			ActionID    = @actionID,
			Description = @description,
			ActionType  = @actionType,
			ActionData  = @actionData
		where  (RuleID = @ruleID AND ActionID = @ActionID)

		select null as ErrorText
    end
    else
	begin
		select 'Action with specified ID "' + @actionID + '" doesn''t exist !' as ErrorText
	end
END


GO


/*  Implementation notes:
      Decsription:
	    Updates user group.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that group with specified ID does exist. Return error text.
        *) If group name is changed, ensure that new group name won't conflict 
           any other group or user name. Return error text.                    
        *) Udpate group.
		 
*/

CREATE PROCEDURE [dbo].[lspr_UpdateGroup]
	@groupID     nvarchar(100) = NULL,
	@groupName   nvarchar(100) = NULL,
	@description nvarchar(400) = NULL,
	@enabled     bit           = NULL
AS
BEGIN
	-- Ensure that group with specified ID does exist.
	if(not exists(select * from lsGroups where (GroupID = @groupID)))
	begin
		select 'Invalid group ID, specified group ID ''' + @groupID + ''' already exists !' as ErrorText
		return;
	end

	-- If group name is changed, ensure that new group name won't conflict 
	-- any other group or user name. Throw Exception if does.
	declare @currentGroupName as nvarchar(100)
	select @currentGroupName = (select GroupName from lsGroups where (GroupID = @groupID))
	if(@currentGroupName != @groupName) 
	begin		
		-- Ensure that group name won't exist already.
		if(exists(select * from lsGroups where (GroupName = @groupName)))
		begin
			select 'Invalid group name, specified group ''' + @groupName + ''' already exists !' as ErrorText
			return;
		end
		-- Ensure that user name with groupName doen't exist.
		else if exists(select * from lsUsers where (UserName = @groupName))
		begin
			select 'Invalid group name, user with specified name ''' + @groupName + ''' already exists !' as ErrorText
			return;
		end
	end

	-- Insert group
	update lsGroups set
		GroupID     = @groupID,
		GroupName   = @groupName,
		Description = @description,
		Enabled     = @enabled	
	where (GroupID = @groupID)
		
	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateMailingList]
	@MailingListID	 varchar(100) = NULL,
	@MailingListName varchar(100) = NULL,
	@Description     varchar(100) = NULL,
	@DomainName      varchar(100) = NULL,
	@enabled         bit          = false
AS

if(exists(select * from lsMailingLists where (MailingListID=@MailingListID)))
begin
	-- If changeing mailing list name, ensure that anyone already haven't got it
	if(exists(select * from lsMailingLists where (MailingListName=@MailingListName)))
	begin
		declare @MailingListOwnerID as nvarchar(100)

		select @MailingListOwnerID = (select MailingListID from lsMailingLists where MailingListName=@MailingListName)
		if(@MailingListOwnerID != @MailingListID)
		begin
			select 'Mailing list with name "' + @MailingListName + '" already exists !' as ErrorText
			return
		end
	end

	update lsMailingLists set 
		MailingListName = @MailingListName,
		Description     = @Description,
		DomainName      = @DomainName,
		Enabled         = @enabled
	where  (MailingListID=@MailingListID)

	select null as ErrorText
end
else
begin
	select 'Mailing list with specified ID "' + @MailingListID + '" doesn''t exist !' as ErrorText
end


GO


/* Updates recycle bin settings.
    @deleteToRecycleBin  - Specifies if messages are deleted to recycle bin. 
    @deleteMessagesAfter - Specifies after what days messages will be deleted.
*/
CREATE PROCEDURE [dbo].[lspr_UpdateRecycleBinSettings]
	@deleteToRecycleBin  bit = 0,
	@deleteMessagesAfter int = 1
AS
BEGIN
    IF(exists(select * from lsRecycleBinSettings))
    BEGIN
	    update lsRecycleBinSettings set
            DeleteToRecycleBin  = @deleteToRecycleBin,
            DeleteMessagesAfter = @deleteMessagesAfter
    END
    ELSE
    BEGIN
        insert into lsRecycleBinSettings (DeleteToRecycleBin,DeleteMessagesAfter)
            values (@deleteToRecycleBin,@deleteMessagesAfter)
    END
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateRoute]
	@routeID     varchar(100) = NULL,
	@cost        bigint       = NULL,
	@enabled     bit          = NULL,
	@description varchar(100) = NULL,
	@pattern     varchar(100) = NULL,
	@action      int          = NULL,
	@actionData  image        = NULL
AS

if(exists(select * from lsRouting where (RouteID=@routeID)))
begin
	-- If changeing route pattern, ensure that it  doesn't exist already
	if(exists(select * from lsRouting where (Pattern=@pattern)))
	begin
		declare @RouteOwnerID as nvarchar(100)

		select @RouteOwnerID = (select RouteID from lsRouting where Pattern=@pattern)
		if(@RouteOwnerID != @RouteID)
		begin
			select 'Route with pattern "' + @pattern + '" already exists !' as ErrorText
			return
		end
	end

	update lsRouting set 
		Cost        = @cost,
		Enabled     = @enabled,
		Description = @Description,
		Pattern     = @pattern,
		Action      = @action,
		ActionData  = @actionData
	where  (RouteID=@RouteID)

	select null as ErrorText
end
else
begin
	select 'Route with specified ID "' + @RouteID + '" doesn''t exist !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_UpdateSecurityEntry]
	@id          varchar(100) = NULL,
	@enabled     bit          = 1,
	@description varchar(100) = NULL,
	@service     varchar(100) = NULL,
	@action      varchar(100) = NULL,
	@startIP     varchar(100) = 0,
	@endIP       varchar(100) = 0
AS

if(exists(select * from lsIPSecurity where (ID=@id)))
begin
	update lsIPSecurity set 
		Enabled     = @enabled,
		Description = @description,
		Service     = @service,
		Action      = @action,
		StartIP     = @startIP,
		EndIP       = @endIP
	where (ID=@id)

	select null as ErrorText
end
else
begin
	select 'Security entry with specified ID "' + @id + '" doesn''t exist !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_UpdateSettings]
	@Settings image = NULL
AS

if(exists(select * from lsSettings))
begin
	update lsSettings set 
		Settings = @Settings
end
else
begin
	insert into lsSettings (Settings) values (@Settings)
end


GO


/*  Implementation notes:
      Decsription:
	    Updates shared folder root.
	  Returns:
		If successful returns nothing, otherwise returns 1 row with error text in column 'ErrorText'.

	  Implementation:
		*) Ensure that root with specified ID does exist. Return error text.
        *) If root name is changed, ensure that new root name won't conflict 
           any other root name. Return error text.                    
        *) Udpate root folder.
		 
*/

CREATE PROCEDURE [dbo].[lspr_UpdateSharedFolderRoot]
	@rootID        nvarchar(100) = NULL,
	@enabled       bit           = NULL,
	@folder        nvarchar(400) = NULL,
	@description   nvarchar(400) = NULL,
	@rootType      int           = NULL,
	@boundedUser   nvarchar(100) = NULL,
	@boundedFolder nvarchar(400) = NULL
AS
BEGIN
	-- Ensure that root with specified ID does exist.
	if(not exists(select * from lsSharedFoldersRoots where (RootID = @rootID)))
	begin
		select 'Invalid root ID, specified root ID ''' + @rootID + ''' already exists !' as ErrorText
		return;
	end

	-- If root name is changed, ensure that new root name won't conflict 
    -- any other root name. Throw Exception if does.
	declare @currentRootName as nvarchar(100)
	select @currentRootName = (select Folder from lsSharedFoldersRoots where (RootID = @rootID))
	if(@currentRootName != @folder) 
	begin		
		-- Ensure that root name won't exist already.
		if(exists(select * from lsSharedFoldersRoots where (Folder = @folder)))
		begin
			select 'Invalid root name, specified root ''' + @folder + ''' already exists !' as ErrorText
			return;
		end
	end

	-- Insert group
	update lsSharedFoldersRoots set
		Enabled       = @enabled,
		Folder        = @folder,
		Description   = @description,
		RootType      = @rootType,
		BoundedUser   = @boundedUser,
		BoundedFolder = @boundedFolder
	where (RootID = @rootID)
		
	select null as ErrorText
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateUser]
	@UserID	     varchar(100) = NULL,
	@FullName    varchar(100) = NULL,
	@UserName    varchar(100) = NULL,
	@Password    varchar(100) = NULL,
	@Description varchar(100) = NULL,
	@DomainName  varchar(100) = NULL,
	@MailboxSize bigint	      = 0,
	@Enabled     bit          = true,
	@permissions int          = 255
AS

if(exists(select * from lsUsers where (UserID=@UserID)))
begin
	-- If changeing username, ensure that anyone already haven't got it
	if(exists(select * from lsUsers where (UserName = @UserName)))
	begin
		declare @UserNameOwnerID as nvarchar(100)

		select @UserNameOwnerID = (select UserID from lsUsers where UserName=@UserName)
		if(@UserNameOwnerID != @UserID)
		begin
			select 'User with user name "' + @UserName + '" already exists !' as ErrorText
			return
		end
	end

	update lsUsers set 
		FullName      = @FullName,
		UserName      = @UserName,
		Password      = @Password,
		Description   = @Description,
		Mailbox_Size  = @MailboxSize,
		DomainName    = @DomainName,
		Enabled       = @Enabled,
		[Permissions] = @permissions
	where  (UserID=@UserID)

	select null as ErrorText
end
else
begin
	select 'User with specified ID "' + @UserID + '" doesn''t exist !' as ErrorText
end


GO


/* Updates user last login time.
    @userName - User name whos last login time to update.
*/
CREATE PROCEDURE [dbo].[lspr_UpdateUserLastLoginTime]
    @userName nvarchar(100) = NULL
AS
BEGIN
    update lsUsers set
        LastLoginTime = getdate()
    where (UserName = @userName)
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateUserMessageRule]
	@userID          nvarchar(100) = NULL,
	@ruleID          nvarchar(100) = NULL,
	@cost            bigint        = NULL,
	@enabled         bit           = NULL,
	@checkNextRule   int           = NULL,
	@description     nvarchar(400) = NULL,
	@matchExpression image         = NULL
AS
BEGIN
	if(exists(select * from lsUserMessageRules where (UserID = @userID AND RuleID = @ruleID)))
    begin
		update lsUserMessageRules set
			UserID          = @userID,
			RuleID          = @ruleID,
			Cost            = @cost,
			Enabled         = @enabled,
			CheckNextRuleIf = @checkNextRule,
			Description     = @description,
			MatchExpression = @matchExpression
		where  (UserID = @userID AND RuleID = @ruleID)

		select null as ErrorText
    end
    else
	begin
		select 'Rule with specified ID "' + @ruleID + '" doesn''t exist !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateUserMessageRuleAction]
	@userID          nvarchar(100) = NULL,
	@ruleID          nvarchar(100) = NULL,
	@actionID        nvarchar(100) = NULL,
	@description     nvarchar(400) = NULL,
	@actionType      int           = NULL,
	@actionData      image         = NULL
AS
BEGIN
	if(exists(select * from lsUserMessageRuleActions where (UserID = @userID AND RuleID = @ruleID AND ActionID = @ActionID)))
    begin
		update lsUserMessageRuleActions set
			UserID      = @userID,
			RuleID      = @ruleID,
			ActionID    = @actionID,
			Description = @description,
			ActionType  = @actionType,
			ActionData  = @actionData
		where (UserID = @userID AND RuleID = @ruleID AND ActionID = @ActionID)

		select null as ErrorText
    end
    else
	begin
		select 'Action with specified ID "' + @actionID + '" doesn''t exist !' as ErrorText
	end
END


GO


CREATE PROCEDURE [dbo].[lspr_UpdateUserRemoteServer] 
	@ServerID       nvarchar(100) = NULL,
	@UserName       nvarchar(100) = NULL,
	@Description    nvarchar(100) = NULL,
	@RemoteServer   nvarchar(100) = NULL,
	@RemotePort     int           = NULL,
	@RemoteUserName nvarchar(100) = NULL,
	@RemotePassword nvarchar(100) = NULL,
	@UseSSL         bit           = NULL,
	@Enabled        bit           = NULL
AS

set nocount on

if(exists(select * from lsUserRemoteServers where (ServerID = @ServerID)))
begin
	-- Get userID
	declare @UserID nvarchar(100)
	select @UserID = (select UserID from lsUsers where UserName=@UserName)

	update lsUserRemoteServers set
		ServerID       = @ServerID,
		UserID         = @UserID,
		Description    = @Description,
		RemoteServer   = @RemoteServer,
		RemotePort     = @RemotePort,
		RemoteUserName = @RemoteUserName,
		RemotePassword = @RemotePassword,
		UseSSL         = @UseSSL,
		Enabled        = @Enabled  
	where (ServerID = @ServerID)

	select null as ErrorText
end
else
begin
	select 'User remote server with specified ID "' + @ServerID + '" doesn''t exist !' as ErrorText
end


GO


CREATE PROCEDURE [dbo].[lspr_ValidateMailboxSize]
	@UserName nvarchar(100) = NULL
AS
BEGIN
    set nocount on

    declare @Size bigint , @AllowedSize bigint
    select  @Size = 0
    select  @AllowedSize = -1

    -- Get mailbox size
    if(exists(select Mailbox_Size from lsUsers where UserName=@UserName))
    begin
        select @AllowedSize = (select Mailbox_Size from lsUsers where UserName=@UserName)
    end
	-- Unlimited mailbox size, don't calculate mailbox size.
    if(@AllowedSize < 1)
	BEGIN
        select cast(1 as Bit) as Validated
        return 
	END


    -- Count mailbox size
    if(exists(select MailBox from lsMailStore where Mailbox=@UserName))
    begin
        select @Size = (select sum(Size) from lsMailStore where Mailbox=@UserName)
    end


    if(@Size < @AllowedSize*1000000)  -- Allowed size in mb, size is bytes
        select cast(1 as Bit) as Validated
    else
	begin
      select cast(0 as Bit) as Validated
    end
END

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Estonia Estonia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions