470,632 Members | 2,040 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,632 developers. It's quick & easy.

New to Classes, please help.

Howdy,

I'm new to classes. Below is my class User. (is this a reserved namespace or
class?) It works great, kind of. If I specify the username and password, the
correct firstname and lastname are returned. For example, username dlozzi,
password fun. It returns David Lozzi as full name. If I login as someone
else on another computer, say username dsmith and password fun2, the second
computer displays the correct fullname. HOWEVER if I refresh the page on the
first computer where I logged in under dlozzi, the information is now
dsmith's info. I believe I am just missing one small piece, but I just
cannot find it. Should I be using Session states along with classes?

Thanks!

David Lozzi

Imports System.Configuration
Imports System.Data.SqlClient
Public Class User
Private Shared sqlConn As String =
ConfigurationSettings.AppSettings("ConnectionStrin g")
Private Shared _firstname As String
Private Shared _lastname As String
Private Shared _username As String
Private Shared _password As String
Public Shared Function Login() As Boolean

_username = Replace(_username, "'", "''")
_password = Replace(_password, "'", "''")

Dim sqlQry As String = "cp_GetUser '" & _username & "'"

Dim myConnection As New SqlConnection(sqlConn)
myConnection.Open()
Dim myCommand As New SqlCommand(sqlQry, myConnection)

Dim rec As SqlDataReader
rec = myCommand.ExecuteReader()

If Not rec.Read Then
Login = False
Else
If _password = rec("strPassword") Then
_firstname = rec("strFirstName")
_lastname = rec("strLastName")
_password = "none"
Login = True
End If
End If
End Function

Public Shared Property FirstName() As String
Get
Return _firstname
End Get
Set(ByVal Value As String)
_firstname = Value
End Set
End Property

Public Shared Property LastName() As String
Get
Return _lastname
End Get
Set(ByVal Value As String)
_lastname = Value
End Set
End Property

Public Shared ReadOnly Property FullName() As String
Get
Return _firstname & " " & _lastname
End Get
End Property

Public Shared ReadOnly Property FullNameRev() As String
Get
Return _lastname & ", " & _firstname
End Get
End Property
Public Shared Property UserName() As String
Get
Return _username
End Get
Set(ByVal Value As String)
_username = Value
End Set
End Property

Public Shared Property Password() As String
Get
Return _password
End Get
Set(ByVal Value As String)
_password = Value
End Set
End Property
End Class
Nov 19 '05 #1
6 1406
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved namespace or
class?) It works great, kind of. If I specify the username and password, the
correct firstname and lastname are returned. For example, username dlozzi,
password fun. It returns David Lozzi as full name. If I login as someone
else on another computer, say username dsmith and password fun2, the second
computer displays the correct fullname. HOWEVER if I refresh the page on the
first computer where I logged in under dlozzi, the information is now
dsmith's info. I believe I am just missing one small piece, but I just
cannot find it. Should I be using Session states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out
in my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say,
put it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com
icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$
N o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)
Nov 19 '05 #2
As David is "new to classes," I thought I'd follow up your excellent advice
with a bit of more detailed information about classes.

A class is a data type, just as an integer or a string. A data type
specifies both the type of data stored in an instance of that type, as well
as the amount of memory necessary to allocate to store that type of data. An
Integer, for example, is a 32-bit storage space that contains an integer
value (remember that underneath it all it's just 1s and 0s). A string is a
pointer to an array of characters. Note that an array is also a data type,
as well as a pointer. A pointer is the address in memory of the object being
pointed to. It is the size of a memory address.

Structures were clreated before classes. A structure is an aggregate data
type (like an array), which can contain multiple data types in a single
storage space. A simple structure, for example, could contain an integer and
a string. The size of the structure would be 32-bits plus the size of the
pointer to the string. A structure can also have process. That is, you can
make a function a member of a structure. So, you can see by now that a
structure is a primitve class of sorts.

With the advnet of OOP, classes were created. Classes are basically
structures, but have additional properties, such as Inheritance,
Encapsulation, Polymorphism and Abstraction. For example, a class can have
private or public members (plus several others). Private class members
cannnot be accessed outside the class. Inheritance gives you the ability to
EXTEND a class with an inherited class. By using Inheritance, all the
characteristics of the base class are automatically attributed to the
inherited class, which can extend the base class with additional properties
or functionality.

As to Shared classes and members: A program has 2 basic memory areas: The
stack and the heap. The heap is where all the code for the program is loaded
when the program starts. In a sense, it is an in-memory copy of the program,
and all of its process and data. It is a single "instance" if you will, of
all the code. As the program runs, functions are called. Ordinarily, a copy
("instance") of the function is placed on top of the stack, where it remains
until the function returns. However, a static method or piece of data is not
instantiated. A copy is not placed on the stack every time the method is
called. Instead, the single "copy" in the heap is used. that single copy is
used by all aspects of the program. As there is only one (hence
"singleton"), it is not thread-safe. In a sense, it is "shared" by all
functions that call it.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
What You Seek Is What You Get.
"Peter MacMillan" <pe***@writeopen.com> wrote in message
news:A5********************@rogers.com...
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved namespace
or class?) It works great, kind of. If I specify the username and
password, the correct firstname and lastname are returned. For example,
username dlozzi, password fun. It returns David Lozzi as full name. If I
login as someone else on another computer, say username dsmith and
password fun2, the second computer displays the correct fullname. HOWEVER
if I refresh the page on the first computer where I logged in under
dlozzi, the information is now dsmith's info. I believe I am just missing
one small piece, but I just cannot find it. Should I be using Session
states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the
class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out in
my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say, put
it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$ N
o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)

Nov 19 '05 #3
Thank you for the explanation. That clears things up a bit ;)

Thanks,

David Lozzi
"Kevin Spencer" <ke***@DIESPAMMERSDIEtakempis.com> wrote in message
news:%2****************@tk2msftngp13.phx.gbl...
As David is "new to classes," I thought I'd follow up your excellent
advice with a bit of more detailed information about classes.

A class is a data type, just as an integer or a string. A data type
specifies both the type of data stored in an instance of that type, as
well as the amount of memory necessary to allocate to store that type of
data. An Integer, for example, is a 32-bit storage space that contains an
integer value (remember that underneath it all it's just 1s and 0s). A
string is a pointer to an array of characters. Note that an array is also
a data type, as well as a pointer. A pointer is the address in memory of
the object being pointed to. It is the size of a memory address.

Structures were clreated before classes. A structure is an aggregate data
type (like an array), which can contain multiple data types in a single
storage space. A simple structure, for example, could contain an integer
and a string. The size of the structure would be 32-bits plus the size of
the pointer to the string. A structure can also have process. That is, you
can make a function a member of a structure. So, you can see by now that a
structure is a primitve class of sorts.

With the advnet of OOP, classes were created. Classes are basically
structures, but have additional properties, such as Inheritance,
Encapsulation, Polymorphism and Abstraction. For example, a class can have
private or public members (plus several others). Private class members
cannnot be accessed outside the class. Inheritance gives you the ability
to EXTEND a class with an inherited class. By using Inheritance, all the
characteristics of the base class are automatically attributed to the
inherited class, which can extend the base class with additional
properties or functionality.

As to Shared classes and members: A program has 2 basic memory areas: The
stack and the heap. The heap is where all the code for the program is
loaded when the program starts. In a sense, it is an in-memory copy of the
program, and all of its process and data. It is a single "instance" if you
will, of all the code. As the program runs, functions are called.
Ordinarily, a copy ("instance") of the function is placed on top of the
stack, where it remains until the function returns. However, a static
method or piece of data is not instantiated. A copy is not placed on the
stack every time the method is called. Instead, the single "copy" in the
heap is used. that single copy is used by all aspects of the program. As
there is only one (hence "singleton"), it is not thread-safe. In a sense,
it is "shared" by all functions that call it.

--
HTH,

Kevin Spencer
Microsoft MVP
.Net Developer
What You Seek Is What You Get.
"Peter MacMillan" <pe***@writeopen.com> wrote in message
news:A5********************@rogers.com...
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved
namespace or class?) It works great, kind of. If I specify the username
and password, the correct firstname and lastname are returned. For
example, username dlozzi, password fun. It returns David Lozzi as full
name. If I login as someone else on another computer, say username
dsmith and password fun2, the second computer displays the correct
fullname. HOWEVER if I refresh the page on the first computer where I
logged in under dlozzi, the information is now dsmith's info. I believe
I am just missing one small piece, but I just cannot find it. Should I
be using Session states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the
class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out
in my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say,
put it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$ N
o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)


Nov 19 '05 #4
Hmm.. OK.

I'm following you for the most part in your sample, but once it is in the
Session var, how do I reference it again somewhere else?

Thanks,

David Lozzi
"Peter MacMillan" <pe***@writeopen.com> wrote in message
news:A5********************@rogers.com...
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved namespace
or class?) It works great, kind of. If I specify the username and
password, the correct firstname and lastname are returned. For example,
username dlozzi, password fun. It returns David Lozzi as full name. If I
login as someone else on another computer, say username dsmith and
password fun2, the second computer displays the correct fullname. HOWEVER
if I refresh the page on the first computer where I logged in under
dlozzi, the information is now dsmith's info. I believe I am just missing
one small piece, but I just cannot find it. Should I be using Session
states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the
class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out in
my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say, put
it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$ N
o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)

Nov 19 '05 #5
OK, so i think i got it. My code is below. It appears to work great, the
user object is saved in the user's session state. Check out the code for
home.aspx. Will I have to thos first 2 lines every time? Can a class pull
data from a session automatically, so all i would have to do is Imports
app.User and then in my script just call the FullName property? Know what I
mean?
*****
in User.vb
Imports System.Configuration
Imports System.Data.SqlClient
Public Class User
Private sqlConn As String =
ConfigurationSettings.AppSettings("ConnectionStrin g")
Private _firstname As String
Private _lastname As String
Private _username As String
Private _password As String
Public Function Login() As Boolean

_username = Replace(_username, "'", "''")
_password = Replace(_password, "'", "''")

Dim sqlQry As String = "cp_GetUser '" & _username & "'"

Dim myConnection As New SqlConnection(sqlConn)
myConnection.Open()
Dim myCommand As New SqlCommand(sqlQry, myConnection)

Dim rec As SqlDataReader
rec = myCommand.ExecuteReader()

If Not rec.Read Then
Login = False
Else
If _password = rec("strPassword") Then
_firstname = rec("strFirstName")
_lastname = rec("strLastName")
_password = "none"
Login = True
End If
End If
End Function

Public Property FirstName() As String
Get
Return _firstname
End Get
Set(ByVal Value As String)
_firstname = Value
End Set
End Property

Public Sub New()

End Sub

Public Property LastName() As String
Get
Return _lastname
End Get
Set(ByVal Value As String)
_lastname = Value
End Set
End Property

Public ReadOnly Property FullName() As String
Get
Return _firstname & " " & _lastname
End Get
End Property

Public ReadOnly Property FullNameRev() As String
Get
Return _lastname & ", " & _firstname
End Get
End Property
Public Property UserName() As String
Get
Return _username
End Get
Set(ByVal Value As String)
_username = Value
End Set
End Property

Public Property Password() As String
Get
Return _password
End Get
Set(ByVal Value As String)
_password = Value
End Set
End Property
End Class

*****
in default.aspx
Dim usr As New User
usr.UserName = txtusername.Text
usr.Password = txtpassword.Text

If Not usr.Login() Then
lblStatus.Text = "Unsuccessful. Please try again.<br>" &
usr.UserName
Else
Session("UserObj") = usr
Response.Redirect("home.aspx")
End If

*****
in home.aspx
1 Dim usr As User
2 usr = Session("UserObj")
3 lblStatus.Text = "Welcome " & usr.FullName & "<br>Fullnamerev " &
usr.FullNameRev

Thanks!!


"David Lozzi" <dlozzi@(remove)delphi-ts.com> wrote in message
news:OW**************@TK2MSFTNGP09.phx.gbl...
Hmm.. OK.

I'm following you for the most part in your sample, but once it is in the
Session var, how do I reference it again somewhere else?

Thanks,

David Lozzi
"Peter MacMillan" <pe***@writeopen.com> wrote in message
news:A5********************@rogers.com...
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved
namespace or class?) It works great, kind of. If I specify the username
and password, the correct firstname and lastname are returned. For
example, username dlozzi, password fun. It returns David Lozzi as full
name. If I login as someone else on another computer, say username
dsmith and password fun2, the second computer displays the correct
fullname. HOWEVER if I refresh the page on the first computer where I
logged in under dlozzi, the information is now dsmith's info. I believe
I am just missing one small piece, but I just cannot find it. Should I
be using Session states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the
class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out
in my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say,
put it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$ N
o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)


Nov 19 '05 #6
If I were you, I'd close my Connection before I'd look at anything else.
Next, I'd turn Option Strict ON. Then I'd fix all of the exceptions that
turning Option Strict ON will raise.

And remember that classes are not magic, or anything strange to you. They
are simply containers for process and data. So, for example, when you ask -
Can a class pull data from a session automatically, so all i would have to
do is Imports app.User and then in my script just call the FullName
property? Know what I mean?
Keep in mind that a class is just code, encapsulated in a class definition.
It can do anything that any other code can do.

Keep studying. "Imports" is a pre-processor declaration that is useful for
the developer, to prevent the developer from having to type the full
namespace every time something in that namespace is used. At run-time, it
does nothing.

One last piece of advice: When somebody gives you code, do yourself a favor
and don't use it until you understand it fully. Why? Well, for one thing,
the next time you need similar code you can write it yourself. It enhances
your skillset. And you wouldn't eat something that some stranger on the
street gave you, would you? It might be bad. So, it's not a good idea for
your program to eat code that somebody gave you off the street without your
understanding what it does, and what it might do that it should not. There's
a lot of bad code floating around out there.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
What You Seek Is What You Get.

"David Lozzi" <dlozzi@(remove)delphi-ts.com> wrote in message
news:eI**************@TK2MSFTNGP15.phx.gbl... OK, so i think i got it. My code is below. It appears to work great, the
user object is saved in the user's session state. Check out the code for
home.aspx. Will I have to thos first 2 lines every time? Can a class pull
data from a session automatically, so all i would have to do is Imports
app.User and then in my script just call the FullName property? Know what
I mean?
*****
in User.vb
Imports System.Configuration
Imports System.Data.SqlClient
Public Class User
Private sqlConn As String =
ConfigurationSettings.AppSettings("ConnectionStrin g")
Private _firstname As String
Private _lastname As String
Private _username As String
Private _password As String
Public Function Login() As Boolean

_username = Replace(_username, "'", "''")
_password = Replace(_password, "'", "''")

Dim sqlQry As String = "cp_GetUser '" & _username & "'"

Dim myConnection As New SqlConnection(sqlConn)
myConnection.Open()
Dim myCommand As New SqlCommand(sqlQry, myConnection)

Dim rec As SqlDataReader
rec = myCommand.ExecuteReader()

If Not rec.Read Then
Login = False
Else
If _password = rec("strPassword") Then
_firstname = rec("strFirstName")
_lastname = rec("strLastName")
_password = "none"
Login = True
End If
End If
End Function

Public Property FirstName() As String
Get
Return _firstname
End Get
Set(ByVal Value As String)
_firstname = Value
End Set
End Property

Public Sub New()

End Sub

Public Property LastName() As String
Get
Return _lastname
End Get
Set(ByVal Value As String)
_lastname = Value
End Set
End Property

Public ReadOnly Property FullName() As String
Get
Return _firstname & " " & _lastname
End Get
End Property

Public ReadOnly Property FullNameRev() As String
Get
Return _lastname & ", " & _firstname
End Get
End Property
Public Property UserName() As String
Get
Return _username
End Get
Set(ByVal Value As String)
_username = Value
End Set
End Property

Public Property Password() As String
Get
Return _password
End Get
Set(ByVal Value As String)
_password = Value
End Set
End Property
End Class

*****
in default.aspx
Dim usr As New User
usr.UserName = txtusername.Text
usr.Password = txtpassword.Text

If Not usr.Login() Then
lblStatus.Text = "Unsuccessful. Please try again.<br>" &
usr.UserName
Else
Session("UserObj") = usr
Response.Redirect("home.aspx")
End If

*****
in home.aspx
1 Dim usr As User
2 usr = Session("UserObj")
3 lblStatus.Text = "Welcome " & usr.FullName & "<br>Fullnamerev " &
usr.FullNameRev

Thanks!!


"David Lozzi" <dlozzi@(remove)delphi-ts.com> wrote in message
news:OW**************@TK2MSFTNGP09.phx.gbl...
Hmm.. OK.

I'm following you for the most part in your sample, but once it is in the
Session var, how do I reference it again somewhere else?

Thanks,

David Lozzi
"Peter MacMillan" <pe***@writeopen.com> wrote in message
news:A5********************@rogers.com...
David Lozzi wrote:
Howdy,

I'm new to classes. Below is my class User. (is this a reserved
namespace or class?) It works great, kind of. If I specify the username
and password, the correct firstname and lastname are returned. For
example, username dlozzi, password fun. It returns David Lozzi as full
name. If I login as someone else on another computer, say username
dsmith and password fun2, the second computer displays the correct
fullname. HOWEVER if I refresh the page on the first computer where I
logged in under dlozzi, the information is now dsmith's info. I believe
I am just missing one small piece, but I just cannot find it. Should I
be using Session states along with classes?

Thanks!

Your problem is coming from all of your methods and properties being
shared. I'm not sure how to explain this without going all-out on OO
methodology... "shared" means there is only one of that thing for the
class.

You're right to have the login method (method is an OO word for
procedure/function).

You want something like:

Public Class User
Private m_username As String

Public Sub New()
End Sub

Public Property Username() As String
Get
Return m_username
End Get
Set(ByVal value As String)
m_username = value
End Set
End Property

Public Shared Function Login(ByVal username As String) As User

Dim result As User
result = new User()
result.Username = username
return result

End Function
End Class
(I don't guarantee that the above will work because I just typed it out
in my newsreader. It should show you what needs to be done).

Now from whereever you're loging them in, you call the Login function to
get a User object. You can then store that User into the Session (say,
put it in Session("UserObject") or something like that.

--
Peter MacMillan
e-mail/msn: pe***@writeopen.com icq: 1-874-927

GCS/IT/L d-(-)>-pu s():(-) a- C+++(++++)>$ UL>$ P++ L+ E-(-) W++(+++)>$
N o w++>$ O !M- V PS PE Y+ t++ 5 X R* tv- b++(+) DI D+(++)>$ G e++ h r--
y(--)



Nov 19 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by todd | last post: by
3 posts views Thread by Logan K. | last post: by
7 posts views Thread by verbatime | last post: by
45 posts views Thread by =?Utf-8?B?QmV0aA==?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.