Products

Solutions

Resources

Partners

Community

Blog

About

QA

Ideas Test

New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

Welcome to the DNN Community Forums, your preferred source of online community support for all things related to DNN.
In order to participate you must be a registered DNNizen

HomeHomeDNN Open Source...DNN Open Source...Module ForumsModule ForumsDocumentsDocumentsImport / Export : Is not workingImport / Export : Is not working
Previous
 
Next
New Post
6/2/2007 3:21 PM
 

Hello ….
I am not a programmer still a new DotNetNuke user, Last week I tried to develop a new module similar to documents module and I success.
Every things is O.K. running smoothly, except :
1- Import / Export : Is not working, It give's an error :
AssemblyVersion: 04.05.02
PortalID: 0
PortalName: Test-Website
UserID: 1
UserName: host
ActiveTabID: 55
ActiveTabName: aaa
RawURL: /aaa/tabid/55/ctl/ExportModule/moduleid/373/Default.aspx
AbsoluteURL: /Default.aspx
AbsoluteURLReferrer: http://localhost/aaa/tabid/55/ctl/ExportModule/moduleid/373/Default.aspx
UserAgent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Mozilla/4.0(Compatible Mozilla/4.0(Compatible-EmbeddedWB 14.57 http://bsalsa.com/ EmbeddedWB- 14.57 from: http://bsalsa.com/ ; FDM)
DefaultDataProvider: DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider
ExceptionGUID: 058252e9-f8a6-4aed-83fb-c5a1ba1af714
InnerException: Could not load file or assembly 'DotNetNuke.Modules.IRRs' or one of its dependencies. The system cannot find the file specified.
FileName:
FileLineNumber: 0
FileColumnNumber: 0
Method: System.RuntimeTypeHandle._GetTypeByName
StackTrace:
Message: System.IO.FileNotFoundException: Could not load file or assembly 'DotNetNuke.Modules.IRRs' or one of its dependencies. The system cannot find the file specified. File name: 'DotNetNuke.Modules.IRRs' at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName) at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) at System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) at DotNetNuke.Framework.Reflection.CreateType(String TypeName, String CacheKey, Boolean UseCache, Boolean IgnoreErrors) WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
Source:
Server Name: ABC

-------------------------------------------
Note: there is check on Supported Features : Portable + Searchable
-------------------------------------------------
Code is:
Public Function ExportModule(ByVal ModuleID As Integer) As String Implements Entities.Modules.IPortable.ExportModule
Dim strXML As String = ""

Dim objModules As New Entities.Modules.ModuleController
Dim objModule As Entities.Modules.ModuleInfo = objModules.GetModule(ModuleID, Null.NullInteger)
Dim objIRRsSettings As IRRsSettingsInfo = GetIRRsSettings(ModuleID)

If Not objIRRsSettings Is Nothing Then
strXML += ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRRsSettings.DisplayColumns) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRRsSettings.ShowTitleLink.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRRsSettings.SortOrder) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRRsSettings.UseCategoriesList.ToString) & ""
strXML += "
"
End If

Dim arrIRRs As ArrayList = GetIRRs(ModuleID, objModule.PortalID)
If arrIRRs.Count <> 0 Then
strXML += ""
Dim objIRR As IRRInfo
For Each objIRR In arrIRRs
strXML += ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Requester) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Url) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Category) & ""

strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.CreatedDate.ToString("dd-MMM-yyyy hh:mm:ss tt")) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Description) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.CreatedByUserID.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Country) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.RecMethod) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.ReqLanguage) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.City) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.Comment) & ""


strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.OwnedByUserID.ToString()) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.ModifiedByUserID.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.ModifiedDate.ToString("dd-MMM-yyyy hh:mm:ss tt")) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIRR.SortOrderIndex.ToString) & ""

strXML += "
"
Next
strXML += "
"
End If

Return strXML

End Function

''' -----------------------------------------------------------------------------
Public Sub ImportModule(ByVal ModuleID As Integer, ByVal Content As String, ByVal Version As String, ByVal UserId As Integer) Implements Entities.Modules.IPortable.ImportModule
Dim xmlIRR As XmlNode

Dim xmlIRRsSettings As XmlNode = GetContent(Content, "IRRssettings")
Dim objIRRsSettings As New IRRsSettingsInfo

objIRRsSettings.ModuleId = ModuleID
objIRRsSettings.DisplayColumns = GetNodeValue(xmlIRRsSettings, "displaycolumns")
objIRRsSettings.ShowTitleLink = GetNodeValueBoolean(xmlIRRsSettings, "showtitlelink")
objIRRsSettings.SortOrder = GetNodeValue(xmlIRRsSettings, "sortorder")
objIRRsSettings.UseCategoriesList = GetNodeValueBoolean(xmlIRRsSettings, "usecategorieslist")

Dim xmlIRRs As XmlNode = GetContent(Content, "IRRs")
For Each xmlIRR In xmlIRRs.SelectNodes("IRR")
Dim objIRR As New IRRInfo
objIRR.ModuleId = ModuleID
objIRR.Requester = xmlIRR.Item("Requester").InnerText
objIRR.Url = ImportUrl(ModuleID, xmlIRR.Item("url").InnerText)
objIRR.Category = xmlIRR.Item("category").InnerText
objIRR.CreatedDate = GetNodeValueDate(xmlIRRs, "createddate", Now)
objIRR.Description = GetNodeValue(xmlIRRs, "description")
objIRR.Country = GetNodeValue(xmlIRRs, "Country")
objIRR.RecMethod = GetNodeValue(xmlIRRs, "RecMethod")
objIRR.ReqLanguage = GetNodeValue(xmlIRRs, "ReqLanguage")
objIRR.City = GetNodeValue(xmlIRRs, "City")
objIRR.Comment = GetNodeValue(xmlIRRs, "Comment")


objIRR.CreatedByUserID = UserId

objIRR.OwnedByUserID = GetNodeValueInt(xmlIRRs, "ownedbyuserid")
objIRR.ModifiedByUserID = GetNodeValueInt(xmlIRRs, "modifiedbyuserid")
objIRR.ModifiedDate = GetNodeValueDate(xmlIRRs, "modifieddate", Now)
objIRR.SortOrderIndex = GetNodeValueInt(xmlIRRs, "sortorderindex")

AddIRR(objIRR)
Next
End Sub

----------------------------------------------------------------------------------------------------------------------------
2- Searching : Is not working, It give's no result:

Code is:
Public Function GetSearchItems(ByVal ModInfo As Entities.Modules.ModuleInfo) As Services.Search.SearchItemInfoCollection Implements Entities.Modules.ISearchable.GetSearchItems
Dim SearchItemCollection As New SearchItemInfoCollection
Dim IRRs As ArrayList = GetIRRs(ModInfo.ModuleID, ModInfo.PortalID)

' TODO: Add new fields

Dim objIRR As Object
For Each objIRR In IRRs
Dim SearchItem As SearchItemInfo
With CType(objIRR, IRRInfo)
Dim UserId As Integer = Null.NullInteger
'If IsNumeric(.CreatedByUser) Then
' UserId = Integer.Parse(.CreatedByUser)
'End If
UserId = .CreatedByUserID
SearchItem = New SearchItemInfo(ModInfo.ModuleTitle & " - " & .Requester, .Requester, UserId, .CreatedDate, ModInfo.ModuleID, .ItemId.ToString, .Requester & " " & .Category, "ItemId=" & .ItemId.ToString)
SearchItemCollection.Add(SearchItem)
End With
Next

Return SearchItemCollection
End Function



Please I need help.
Fahad

 
New Post
6/3/2007 1:57 AM
 

I think both problems are retaled to the same issue: when you implement iportable or iserarchable you have to specify the BusinessController field in the module .dnn installation file. Seems you used "'DotNetNuke.Modules.IRRs" but this cannot be found. Maybe you have a different name? Check in documents how it's configured and change this value appropiately.


Vicenç Masanas
Banyoles, Girona - Spain

Disgrafic.com    PSD to DNN
 
New Post
6/3/2007 6:16 AM
 
Thanks ofr your replay.

This is the file (DNN_IRRs.dnn) :




DNN_IRRs
IRRs
IRRs
DNN_IRRs
This is IRRs module.
01.00.00
DotNetNuke.Modules.IRRs.IRRController, DotNetNuke.Modules.IRRs


IRRs
0


DesktopModules/IRRs/IRR.ascx
View
http://www.dotnetnuke.com/default.aspx?tabid=787


Edit
Edit IRRs
DesktopModules/IRRs/EditReqs.ascx
Edit
http://www.dotnetnuke.com/default.aspx?tabid=787


Settings
IRRs Settings
DesktopModules/IRRs/EditIRRsSettings.ascx
Edit
http://www.dotnetnuke.com/default.aspx?tabid=787






IRR.ascx


IRR.ascx.vb


EditReqs.ascx


EditReqs.ascx.vb


EditIRRsSettings.ascx


EditIRRsSettings.ascx.vb


module.css


App_LocalResources
IRR.ascx.resx


App_LocalResources
EditReqs.ascx.resx


App_LocalResources
EditIRRsSettings.ascx.resx


[app_code]
DataProvider.vb


[app_code]
IRRController.vb


[app_code]
IRRInfo.vb


[app_code]
SqlDataProvider.vb


01.01.00.SqlDataProvider


01.02.00.SqlDataProvider


01.03.00.SqlDataProvider


Uninstall.SqlDataProvider




 
New Post
6/4/2007 6:05 AM
 

So you are using a source version for the module so the businesscontroller needs be be specified in a differen manner.

You have to look a that file [app_code] / IRRController.vb, and see the namespace and class names there. Then use that info to provide the full class name dnn needs:

[full namespace].[classname]



Vicenç Masanas
Banyoles, Girona - Spain

Disgrafic.com    PSD to DNN
 
New Post
6/8/2007 4:10 PM
 
vmasanas wrote

So you are using a source version for the module so the businesscontroller needs be be specified in a differen manner.

You have to look a that file [app_code] / IRRController.vb, and see the namespace and class names there. Then use that info to provide the full class name dnn needs:

[full namespace].[classname]



-------------------------------------------------------
THAAAAANKS,

I tried this:
DotNetNuke.Modules.IRRs.IRRController, DotNetNuke.Modules.IRRs

But No success , will this is the code for IRRController.vb :


'
Imports DotNetNuke.Services.Search
Imports System
Imports System.Configuration
Imports System.Data
Imports DotNetNuke
Imports System.XML
Imports DotNetNuke.Common.Utilities.XmlUtils

Namespace DotNetNuke.Modules.IIRs

Public Class IIRController
Implements Entities.Modules.ISearchable
Implements Entities.Modules.IPortable

#Region "Public Methods"

Public Sub AddIIR(ByVal objIIR As IIRInfo)

DataProvider.Instance().AddIIR(objIIR.ModuleId, objIIR.Source, objIIR.Url, objIIR.CreatedByUserID, objIIR.OwnedByUserID, objIIR.Category, objIIR.SortOrderIndex, objIIR.Material, objIIR.Country, objIIR.RecMethod, objIIR.MatLanguage, objIIR.City, objIIR.Quantity, objIIR.Comment)

End Sub

Public Sub DeleteIIR(ByVal ItemID As Integer)

DataProvider.Instance().DeleteIIR(ItemID)

End Sub

Public Function GetIIR(ByVal ItemId As Integer, ByVal ModuleId As Integer) As IIRInfo

Return CType(CBO.FillObject(DataProvider.Instance().GetIIR(ItemId, ModuleId), GetType(IIRInfo)), IIRInfo)

End Function

Public Function GetIIRs(ByVal ModuleId As Integer, ByVal PortalId As Integer) As ArrayList

Return CBO.FillCollection(DataProvider.Instance().GetIIRs(ModuleId, PortalId), GetType(IIRInfo))

End Function

Public Sub UpdateIIR(ByVal objIIR As IIRInfo)
DataProvider.Instance().UpdateIIR(objIIR.ItemId, objIIR.Source, objIIR.Url, objIIR.CreatedByUserID, objIIR.OwnedByUserID, objIIR.Category, objIIR.SortOrderIndex, objIIR.Material, objIIR.Country, objIIR.RecMethod, objIIR.MatLanguage, objIIR.City, objIIR.Quantity, objIIR.Comment)
End Sub

Public Sub AddIIRsSettings(ByVal objIIRsSettings As IIRsSettingsInfo)
DataProvider.Instance().AddIIRsSettings(objIIRsSettings.ModuleId, objIIRsSettings.ShowTitleLink, objIIRsSettings.SortOrder, objIIRsSettings.DisplayColumns, objIIRsSettings.UseCategoriesList)
End Sub

Public Sub DeleteIIRsSettings(ByVal ModuleID As Integer)
DataProvider.Instance().DeleteIIRsSettings(ModuleID)
End Sub

Public Function GetIIRsSettings(ByVal ModuleId As Integer) As IIRsSettingsInfo
Return CType(CBO.FillObject(DataProvider.Instance().GetIIRsSettings(ModuleId), GetType(IIRsSettingsInfo)), IIRsSettingsInfo)
End Function

Public Sub UpdateIIRsSettings(ByVal objIIRsSettings As IIRsSettingsInfo)
DataProvider.Instance().UpdateIIRsSettings(objIIRsSettings.ModuleId, objIIRsSettings.ShowTitleLink, objIIRsSettings.SortOrder, objIIRsSettings.DisplayColumns, objIIRsSettings.UseCategoriesList)
End Sub

#End Region

#Region "Optional Interfaces"

Public Function GetSearchItems(ByVal ModInfo As Entities.Modules.ModuleInfo) As Services.Search.SearchItemInfoCollection Implements Entities.Modules.ISearchable.GetSearchItems
Dim SearchItemCollection As New SearchItemInfoCollection
Dim IIRs As ArrayList = GetIIRs(ModInfo.ModuleID, ModInfo.PortalID)

' TODO: Add new fields

Dim objIIR As Object
For Each objIIR In IIRs
Dim SearchItem As SearchItemInfo
With CType(objIIR, IIRInfo)
Dim UserId As Integer = Null.NullInteger
'If IsNumeric(.CreatedByUser) Then
' UserId = Integer.Parse(.CreatedByUser)
'End If
UserId = .CreatedByUserID
SearchItem = New SearchItemInfo(ModInfo.ModuleTitle & " - " & .Source, .Source, UserId, .CreatedDate, ModInfo.ModuleID, .ItemId.ToString, .Source & " " & .Category, "ItemId=" & .ItemId.ToString)
SearchItemCollection.Add(SearchItem)
End With
Next

Return SearchItemCollection
End Function


Public Function ExportModule(ByVal ModuleID As Integer) As String Implements Entities.Modules.IPortable.ExportModule
Dim strXML As String = ""

Dim objModules As New Entities.Modules.ModuleController
Dim objModule As Entities.Modules.ModuleInfo = objModules.GetModule(ModuleID, Null.NullInteger)
Dim objIIRsSettings As IIRsSettingsInfo = GetIIRsSettings(ModuleID)

If Not objIIRsSettings Is Nothing Then
strXML += ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIRsSettings.DisplayColumns) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIRsSettings.ShowTitleLink.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIRsSettings.SortOrder) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIRsSettings.UseCategoriesList.ToString) & ""
strXML += "
"
End If

Dim arrIIRs As ArrayList = GetIIRs(ModuleID, objModule.PortalID)
If arrIIRs.Count <> 0 Then
strXML += ""
Dim objIIR As IIRInfo
For Each objIIR In arrIIRs
strXML += ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Source) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Url) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Category) & ""

strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.CreatedDate.ToString("dd-MMM-yyyy hh:mm:ss tt")) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Material) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.CreatedByUserID.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Country) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.RecMethod) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.MatLanguage) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.City) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Quantity) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.Comment) & ""


strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.OwnedByUserID.ToString()) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.ModifiedByUserID.ToString) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.ModifiedDate.ToString("dd-MMM-yyyy hh:mm:ss tt")) & ""
strXML += "" & DotNetNuke.Common.Utilities.XmlUtils.XMLEncode(objIIR.SortOrderIndex.ToString) & ""

strXML += "
"
Next
strXML += "
"
End If

Return strXML

End Function

Public Sub ImportModule(ByVal ModuleID As Integer, ByVal Content As String, ByVal Version As String, ByVal UserId As Integer) Implements Entities.Modules.IPortable.ImportModule
Dim xmlIIR As XmlNode

Dim xmlIIRsSettings As XmlNode = GetContent(Content, "IIRssettings")
Dim objIIRsSettings As New IIRsSettingsInfo

objIIRsSettings.ModuleId = ModuleID
objIIRsSettings.DisplayColumns = GetNodeValue(xmlIIRsSettings, "displaycolumns")
objIIRsSettings.ShowTitleLink = GetNodeValueBoolean(xmlIIRsSettings, "showtitlelink")
objIIRsSettings.SortOrder = GetNodeValue(xmlIIRsSettings, "sortorder")
objIIRsSettings.UseCategoriesList = GetNodeValueBoolean(xmlIIRsSettings, "usecategorieslist")

Dim xmlIIRs As XmlNode = GetContent(Content, "IIRs")
For Each xmlIIR In xmlIIRs.SelectNodes("IIR")
Dim objIIR As New IIRInfo
objIIR.ModuleId = ModuleID
objIIR.Source = xmlIIR.Item("Source").InnerText
objIIR.Url = ImportUrl(ModuleID, xmlIIR.Item("url").InnerText)
objIIR.Category = xmlIIR.Item("category").InnerText
objIIR.CreatedDate = GetNodeValueDate(xmlIIRs, "createddate", Now)
objIIR.Material = GetNodeValue(xmlIIRs, "Material")
objIIR.Country = GetNodeValue(xmlIIRs, "Country")
objIIR.RecMethod = GetNodeValue(xmlIIRs, "RecMethod")
objIIR.MatLanguage = GetNodeValue(xmlIIRs, "MatLanguage")
objIIR.City = GetNodeValue(xmlIIRs, "City")
objIIR.Quantity = GetNodeValue(xmlIIRs, "Quantity")
objIIR.Comment = GetNodeValue(xmlIIRs, "Comment")


objIIR.CreatedByUserID = UserId

objIIR.OwnedByUserID = GetNodeValueInt(xmlIIRs, "ownedbyuserid")
objIIR.ModifiedByUserID = GetNodeValueInt(xmlIIRs, "modifiedbyuserid")
objIIR.ModifiedDate = GetNodeValueDate(xmlIIRs, "modifieddate", Now)
objIIR.SortOrderIndex = GetNodeValueInt(xmlIIRs, "sortorderindex")

AddIIR(objIIR)
Next
End Sub

#End Region

End Class

End Namespace

-----------------------------------------------------------------------------------------------------------------

I need your help.

Best Regrads.
FHD
 
Previous
 
Next
HomeHomeDNN Open Source...DNN Open Source...Module ForumsModule ForumsDocumentsDocumentsImport / Export : Is not workingImport / Export : Is not working


These Forums are dedicated to discussion of DNN Platform and Evoq Solutions.

For the benefit of the community and to protect the integrity of the ecosystem, please observe the following posting guidelines:

  1. No Advertising. This includes promotion of commercial and non-commercial products or services which are not directly related to DNN.
  2. No vendor trolling / poaching. If someone posts about a vendor issue, allow the vendor or other customers to respond. Any post that looks like trolling / poaching will be removed.
  3. Discussion or promotion of DNN Platform product releases under a different brand name are strictly prohibited.
  4. No Flaming or Trolling.
  5. No Profanity, Racism, or Prejudice.
  6. Site Moderators have the final word on approving / removing a thread or post or comment.
  7. English language posting only, please.
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out