Latest News: (loading..)
Top_Speed

[CONTRIBUTION] Sloppy Words Cleaner

96 posts in this topic

**This Thread is for the development and support of Sloppy Words Cleaner ONLY!**

 

I didn't originally start (or thought there would be a need for) a support/development thread but the next day after uploading the contrib I got hammered with messages (and much praise, thanks)

 

Contrib Overview: Capitalizes the 1st word in each cell for customers account input, rewrites the words on form submit.

Things to come: I want to be able to "clean" the existing customer names, addresses, emails in the db. (since I have only live shops left and no test shops since moving to a dedicated server this has been delayed)

Contrib example: Customer inputs his/her data in the create account screen and as most of you know- it's sometimes a mess!

------customer inputs------

john doe

123 nowhere st.

Akron, OH 12345

----will be rewrote as-----

John Doe

123 Nowhere St.

Akron, OH 12345

 

*or some customers want to "shout!"*

------customer inputs------

JOHN DOE

123 NOWHERE ST.

Akron, OH 12345

----will be rewrote as-----

John Doe

123 Nowhere St.

Akron, OH 12345

 

*or some customers are just "special people"*

------customer inputs------

johN dOe

123 noWHERE sT.

Akron, OH 12345

----will be rewrote as-----

John Doe

123 Nowhere St.

Akron, OH 12345

 

In addition I had many of my customers inputting emails in upper & lower case as well so I added in the contrib a strtolower() command for the email.

------customer inputs------

jondoe@AOL.com (or)

JONDOE@AOL.COM

etc....

----will be recorded as-----

jondoe@aol.com

 

BTW- Any input to advance/improve this contrib is welcomed! :)

Share this post


Link to post
Share on other sites

Some of the messages that I got and want to make public (Isn't that what forums are about?). So please don't message me with questions, simply state them here so others can learn from it too!

 

Q: Why is every line altered instead of the entire block of code?

A: Many site owners have heavily altered (modified) shops. The "block" lines of code this mod effects can be altered in so many different ways including other mods line inserts. So if somebody had the block of code altered by another contrib/mod, the FIND [block of code]: would not come up but by singling out the individual lines that shouldn't effect other contribs & mods installed.

 

Q: I want to keep the email the way the customer inputs it

A: Easy then, just don't add the lines with "email", if you already copied in the contrib... edit the email lines and remove the (strtolower[keep string intact] and one of the trailing ")"

 

Q: How do I add exceptions?

A: Edit your catalog/includes/account_validation.php (always backup 1st!) Follow suite with a "," (comma) in between and no "," (comma) after the last command. Here's a snippet and I added a couple of extras from your original download (so you can see it's just following suite). I added FWY HWY JCT... you may want to add many more like TWP for Township as so forth.........

function RemoveShouting($string)
{
$lower_exceptions = array(
	"to" => "1", "a" => "1", "the" => "1", "of" => "1"
);

$higher_exceptions = array(
	"I" => "1", "II" => "1", "III" => "1", "IV" => "1",
	"V" => "1", "VI" => "1", "VII" => "1", "VIII" => "1",
	"XI" => "1", "X" => "1", "PO" => "1", "RR" => "1",
	"CTR" => "1", "US" => "1", "CT" => "1", "CRT" => "1",
	"FWY" => "1", "HWY" => "1", "JCT" => "1", "JCTS" => "1"
);

$words = split(" ", $string);
$newwords = array();

foreach ($words as $word)
{
	if (!$higher_exceptions[$word])
			$word = strtolower($word);
	if (!$lower_exceptions[$word])
			$word = ucfirst($word);
	 array_push($newwords, $word);

}

return join(" ", $newwords); 
}

 

Q: Some company names needs to be all caps like AJAX Warehousing, ABC Laundry, ZZ Top Tee Shits etc.

A: Well it would be impossible to put unexpected upper case words into the exceptions list so for this so I would suggest just not altering (editing) the lines that have "company" in it. If you already have the files edited with the RemoveShouting() just remove the (RemoveShouting keep the string intact and the end ")"

 

Q: How do I get all of my old accounts to conform to this?

A: Right now you can't, but it is on our wish list!! :) We will have to write a mysql php file for this

 

Q: I know php to a moderate state so I edited in the RemoveShouting line codes manually but now my edit account page is just all white?

A: Could be a couple of things depending on what got screwed up or left out. Here's a quick tip for any dirty hackers.......

 

__Look at your end tags, any RemoveShouting(), strtolower(), ucfirst(), ucwords() have to have an additional ")" on the end of that line

[osC default line]... pls notice only one single ")" on the end with the trailing ";"

$firstname = tep_db_prepare_input($HTTP_POST_VARS['firstname']);

With contribs edit, notice the double "))" and the still the trailing ";"

$firstname = tep_db_prepare_input(RemoveShouting($HTTP_POST_VARS['firstname']));

 

__Another troubleshoot is if you did not add to all effected pages where the page should find the RemoveShouting function code. NOTE: this does not have to be added to catalog/create_account.php (it's already there, but the other pages have to have it... pls look back at the install directions!)

include_once('includes/functions/' . FILENAME_ACCOUNT_VALIDATION);

 

Q: Any intentions to add this to the ACP for easy on/off per cell?

A: Mysql and radio buttons in the ACP Config would be quite easy BUT I don't think so... not sure if all the "if==" statements throughout the pages for this mod would warrant it. It's easy enough to customize and I don't really see anybody going back and forth between clean words and sloppy words. :)

 

**OK, that catches up on the most popular Q's I have been messaged on so far, please post any more Q's below and... any developers wish to add input I would welcome them and their ideas!

 

KJ Miller (Top_Speed) www.gokartsRus.com

Share this post


Link to post
Share on other sites

Some for the wish list

 

John McDoe

John MacDoe

John Fortesque-Doe

 

Can't find the discussion on php.net that covers this but I seem to remember it being there somewhere.

 

G

Share this post


Link to post
Share on other sites
Some for the wish list

 

John McDoe

John MacDoe

John Fortesque-Doe

 

Can't find the discussion on php.net that covers this but I seem to remember it being there somewhere.

 

G

 

Hi there,

 

It sounds like a great contribution, but the first file that has to be changed is catalog/includes/functions/account_validation.php and I don't have that file. I've searched for it, but even the original OsCommerce doesn't have this file. What I've got is catalog/includes/functions/validation.php but there's no function like get_reg_key.

 

Could someone please tell me what to do next?

 

Marcus

Share this post


Link to post
Share on other sites
Hi there,

 

It sounds like a great contribution, but the first file that has to be changed is catalog/includes/functions/account_validation.php and I don't have that file. I've searched for it, but even the original OsCommerce doesn't have this file. What I've got is catalog/includes/functions/validation.php but there's no function like get_reg_key.

 

Could someone please tell me what to do next?

 

Marcus

 

Hi Marcus

SO ....3 easy steps if you don't have this file!

 

1. Make a page named: account_verification.php (or simply go back to contrib and download the pkg again as it will now include it!)

2. Copy this into the page (that is if you don't get it off the contrib download as v1.01)

<?php
/*
 $Id: account_validation.php,v 2.1a 2004/08/10 20:19:27 chaicka Exp $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2004 osCommerce

 Released under the GNU General Public License
*/

////
// BEGIN Sloppy Words Contrib

function RemoveShouting($string)
{
$lower_exceptions = array(
	"to" => "1", "a" => "1", "the" => "1", "of" => "1"
);

$higher_exceptions = array(
	"I" => "1", "II" => "1", "III" => "1", "IV" => "1",
	"V" => "1", "VI" => "1", "VII" => "1", "VIII" => "1",
	"XI" => "1", "X" => "1", "PO" => "1", "RR" => "1",
	"CTR" => "1", "US" => "1", "CT" => "1", "CRT" => "1",
	"FWY" => "1", "HWY" => "1", "JCT" => "1", "JCTS" => "1"
);

$words = split(" ", $string);
$newwords = array();

foreach ($words as $word)
{
	if (!$higher_exceptions[$word])
			$word = strtolower($word);
	if (!$lower_exceptions[$word])
			$word = ucfirst($word);
	 array_push($newwords, $word);

}

return join(" ", $newwords); 
}

////
// END Sloppy Words Contrib

?>

 

3. Upload the newly created account_verification.php page to catalog/includes/functions/

 

One more note, you will have to probably ADD this line below (look to see if it's not in there but it shouldn't be since you don't (or at least didn't have the referring file)

 

IN: catalog/create_account.php

FIND: (should be almost at very top of page!)

 require('includes/application_top.php');

 

ADD JUST BELOW:

include_once('includes/functions/' . FILENAME_ACCOUNT_VALIDATION);

 

The other files in the install.txt already have this copy but since you didn't have the file originally you will need to add it there.

 

-Let me know if this works! Glad you pointed this out

-KJ

 

****I will update the install.txt plus add the account_validation.php for people that don't have this in their osC****

Share this post


Link to post
Share on other sites

The above filename(s) should be account_validation.php (not verification)

 

Eww... my BAD!!

I need coffee i guess :)

 

 

*** Uploaded newly revised contrib to reflect either having or not having the file in your osC ***

Share this post


Link to post
Share on other sites

Interesting idea, but...

 

Converting last names is not such an easy task, what about all those MacDonalds that become Macdonalds or the Hyphen-Hyphens that become the Hyphen-hyphens or the van der Capitals that become the Van Der Capitals...

 

Have a look at this on php.net: ucwords

then scroll down a bit. The contributions from the Italians are pretty comprehensive but still in the end none of them work 100%...

 

Mind you all is well if you are a MacDonald but there again what about the Macallisters who then become the MacAllisters!

Share this post


Link to post
Share on other sites
Hi Marcus

SO ....3 easy steps if you don't have this file!

 

1. Make a page named: account_verification.php (or simply go back to contrib and download the pkg again as it will now include it!)

2. Copy this into the page (that is if you don't get it off the contrib download as v1.01)

3. Upload the newly created account_verification.php page to catalog/includes/functions/

 

One more note, you will have to probably ADD this line below (look to see if it's not in there but it shouldn't be since you don't (or at least didn't have the referring file)

 

IN: catalog/create_account.php

FIND: (should be almost at very top of page!)

 require('includes/application_top.php');

 

ADD JUST BELOW:

include_once('includes/functions/' . FILENAME_ACCOUNT_VALIDATION);

 

The other files in the install.txt already have this copy but since you didn't have the file originally you will need to add it there.

 

-Let me know if this works! Glad you pointed this out

-KJ

 

****I will update the install.txt plus add the account_validation.php for people that don't have this in their osC****

 

Hi there again,

 

thanx for the account_validation file. It helps alot. But still: I don't want to bug you again, but there are more lines within account_edit.php which doens't contain some lines you say we have to change:

 

$street_address = tep_db_prepare_input($HTTP_POST_VARS['street_address']);

and

$city = tep_db_prepare_input($HTTP_POST_VARS['city']);

 

are these lines really neccessary? Because otherwise it won't work.

 

Marcus

Share this post


Link to post
Share on other sites
Hi there again,

 

thanx for the account_validation file. It helps alot. But still: I don't want to bug you again, but there are more lines within account_edit.php which doens't contain some lines you say we have to change:

 

$street_address = tep_db_prepare_input($HTTP_POST_VARS['street_address']);

and

$city = tep_db_prepare_input($HTTP_POST_VARS['city']);

 

are these lines really neccessary? Because otherwise it won't work.

 

Marcus

 

And again, sorry to bug you, in the install-file your telling to update $firstname string twice, but it must be $firstname once and than $lastname

 

so it should be:

 

#### FIND:

$lastname = tep_db_prepare_input($HTTP_POST_VARS['lastname']);

 

#### REPLACE WITH:

$lastname = tep_db_prepare_input(RemoveShouting($HTTP_POST_VARS['lastname']));

 

 

and in address_book you come up with the same changes, but all these lines are not on this page. Which file should be added otherwise?

 

Marcus

Share this post


Link to post
Share on other sites

Hi Marcus

Your never a bother, I'm willing to work with just about aNyBOdy :) hehe

 

--I just screened through and found the first_names that s/b last_names (corrected in latest install.txt)

 

--The install file now notes that if you don't have one (or more) of the line edits just to omit that and go on to the next. Depending on your osC snapshot you may have less (or maybe more?) than my later snap. I know if your running Simple Template Sys, you may have a couple of these FIND:(s) to be "Not found".

 

--If anybody is worried about McDonalds being stored as Mcdonalds, leave out the last_name edits then. Personally for me? all the crap that has been input by customers into my 2 active shops, I'll take the Mcdonalds over MCDONALDS or the caps lock forgetter... mCDONALDS

 

--ucwords is 2 tickets short of a red-eye flight out of Laguardia lol

try it if you like! I'm sure you'll find it's easy to implement (no call to function needed as it is a base php command just like ucfirst (which by the way is not to bad, but it still will allow SHOUTING and multiple words per input cell are ignored).

 

So until some genius comes up with a way-array to mix upper/lower class words (for the McWilliams or MacWilliams) and be relative to know all of what could (& should) be getting inputted??? We are sitting here happy here on blueberry hill tipping a cold beer to a mighty typo-correct (but not perfect) customer database.

 

I'm happier than heck that all my new orders coming in are looking so professional, I think I'll have another beer :) cheers!

 

Keep up the troubleshooting guys...

My eyes get watery as my g/f is always walking around the house in a thong and my attention span goes all to hell sometimes. damn women ;)

 

CUSTOMER INVOICES NOW LOOK GREAT! (here's a test account that I input "as screwy as I could get it", this test account (and) invoices/packing slips now come out squeaky clean!)

test_invoice.jpg

Share this post


Link to post
Share on other sites
Hi Marcus

Your never a bother, I'm willing to work with just about aNyBOdy :) hehe

 

--I just screened through and found the first_names that s/b last_names (corrected in latest install.txt)

 

--The install file now notes that if you don't have one (or more) of the line edits just to omit that and go on to the next. Depending on your osC snapshot you may have less (or maybe more?) than my later snap. I know if your running Simple Template Sys, you may have a couple of these FIND:(s) to be "Not found".

 

--If anybody is worried about McDonalds being stored as Mcdonalds, leave out the last_name edits then. Personally for me? all the crap that has been input by customers into my 2 active shops, I'll take the Mcdonalds over MCDONALDS or the caps lock forgetter... mCDONALDS

 

--ucwords is 2 tickets short of a red-eye flight out of Laguardia lol

try it if you like! I'm sure you'll find it's easy to implement (no call to function needed as it is a base php command just like ucfirst (which by the way is not to bad, but it still will allow SHOUTING and multiple words per input cell are ignored).

 

So until some genius comes up with a way-array to mix upper/lower class words (for the McWilliams or MacWilliams) and be relative to know all of what could (& should) be getting inputted??? We are sitting here happy here on blueberry hill tipping a cold beer to a mighty typo-correct (but not perfect) customer database.

 

I'm happier than heck that all my new orders coming in are looking so professional, I think I'll have another beer :) cheers!

 

Keep up the troubleshooting guys...

My eyes get watery as my g/f is always walking around the house in a thong and my attention span goes all to hell sometimes. damn women ;)

 

CUSTOMER INVOICES NOW LOOK GREAT! (here's a test account that I input "as screwy as I could get it", this test account (and) invoices/packing slips now come out squeaky clean!)

test_invoice.jpg

 

Hi,

 

thanx a lot. I've added every page you've said to be changed, but I didn't get it working so far because in the install-file nothing is written about catalog/create_account.php which has to be changed as well. I've uploaded a new install file to the addons-list at Sloppy Words Cleaner 1.02 which contains this update.

 

Hopefully it will work now as promissed.

 

Marcus

Share this post


Link to post
Share on other sites

ver1.2 just uploaded

 

1. Changed call function file, not a shared file anymore, contrib has it's own now!

 

2. Added exception names (& works on street names also) to be included as McNabb, MacDermitt, McDonald etc. So if a customer types in their name correctly, it will keep it as such and won't try to change it back to lower case after the first upper case letter.

 

3. Added a file define that I think some were missing b/c they didn't have the account_validation file originally (now the contrib uses account_word_cleaner.php) and the instructs define the file in filenames.php

 

4. cleaned instructions

 

5. added a upgrade txt file

(simple)

- if you had a file named catalog/includes/functions/account_validate.php BEFORE adding this contrib...

simply edit out the function call for Sloppy Words (another words just take out what you edited in).

- if you never had the file before, just delete it. The new version (and insatll.txt) does not use it anymore!

 

 

Please let me know what works and what doesn't :)

Share this post


Link to post
Share on other sites

**Prior users of this contrib only**

 

Review the new install.txt

 

A. The following function call needs to be replaced

include_once('includes/functions/' . FILENAME_ACCOUNT_VALIDATION);

 

 

B. You will be essentially just be replacing that line with this one:

include_once('includes/functions/' . FILENAME_ACCOUNT_WORD_CLEANER);

 

 

--> modify with above to these files:

catalog/create_account.php (exception: leave the account_validation statement present in this file only IF it was there before contrib)

catalog/account_edit.php

catalog/checkout_shipping_address.php

catalog/address_book_process.php

 

 

C. Don't forget to define the new file (or you will get a blank white screen!):

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

STEP 2

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

Open catalog/includes/filenames.php

 

#### FIND (at very end of file)

?>

 

#### BEFORE ADD:

define('FILENAME_ACCOUNT_WORD_CLEANER', 'account_word_cleaner.php');

 

D. UPLOAD THE NEW FILE!

account_word_cleaner.php to : catalog/includes/functions/

 

(It contains the newly added exclusions and MickyD's) lol.

Note: All the "line-edits" stay the same so this should be a pretty quick update.

Share this post


Link to post
Share on other sites

Hi,

 

Great contrib. Just what I've been looking for :)

 

I've been editing my pages, ready to up load, but noticed there's no code for the Postcode (aka Zip code), as I get lots filled in with lower case, rather than the correct upper case, for example aa1 2aa should be AA1 2AA. Will this contrib. take care of this problem please?

 

Thanks in advance

 

Steve

Share this post


Link to post
Share on other sites
Hi,

 

Great contrib. Just what I've been looking for :)

 

I've been editing my pages, ready to up load, but noticed there's no code for the Postcode (aka Zip code), as I get lots filled in with lower case, rather than the correct upper case, for example aa1 2aa should be AA1 2AA. Will this contrib. take care of this problem please?

 

Thanks in advance

 

Steve

 

Hi Steve,

 

Glad you like the contrib :)

 

No problem on making the ZIP stay in CAPS i.e. 12A4 CH69 (instead of: 12a4 ch69)

 

(you will need to edit all the files shown that have line edits, I don't think account_edit uses postcode but check as your osC version may)......

FIND:

 $postcode = tep_db_prepare_input($HTTP_POST_VARS['postcode']);

 

CHANGE TO:

$postcode = tep_db_prepare_input(strtoupper($HTTP_POST_VARS['postcode']));

 

That's it, remeber to put this in the edited files that install.txt refers to editing (if the postcode line) is not in that group, leave it out and edit the next file! FYI: we don't need a function call for this b/c the command: string strtoupper ( string $string ) is in the base php code already.

 

Cheers!

Share this post


Link to post
Share on other sites

Hi KJM,

 

Thanks for the additional information. All files updated and uploaded. And it does what it say's with no fuss at all.

 

Top marks for this contrib. :D

 

Thanks

 

Steve

Share this post


Link to post
Share on other sites

hmm .. i received an error

 

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/web/secure.domain.com/www/includes/functions/account_word_cleaner.php on line 17

Share this post


Link to post
Share on other sites
hmm .. i received an error

 

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/web/secure.domain.com/www/includes/functions/account_word_cleaner.php on line 17

Hi,

 

It may help if you post the code, so we can have a look?

 

Steve

Share this post


Link to post
Share on other sites
hmm .. i received an error

 

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/web/secure.domain.com/www/includes/functions/account_word_cleaner.php on line 17

 

Hi Greg,

 

I think I have that fixed for some of you users that have that error...

 

Download pkg again (it's revised w/ fix): Sloppy Words Cleaner

-then all you have to do is re-upload the new catalog/includes/functions/account_word_cleaner.php that's in the contrib (ignore all else)

 

PLEASE LET ME KNOW IF THIS WORKS FOR YOU!!!! ...otherwise I won't know :(

Share this post


Link to post
Share on other sites

Thanks Top_Speed for putting together this contribution. I had worked on changes to my name and address fields, this one goes beyond the simpler approach I was taking :)

 

I noticed that your install instructions don't include an update to "Checkout_Payment_Address.php", this is the module that is called when a user wants to enter a new billing address during checkout.

 

Also, a suggestion to make the install easier and quicker. Instead of this all the find and replaces you've listed in the install, it's just as effective to keep the current input for the variables "as is" and then use the RemoveShouting to clean-up the input. As an example, I didn't change my input for firstname from "$firstname = tep_db_prepare_input($HTTP_POST_VARS['firstname']);", just left as is.

 

However I then put in code that hits all the input variables all at once. In the Checkout_Payment_Address.php I put in right after

        $state = tep_db_prepare_input($HTTP_POST_VARS['state']);
     }
// Added 11/21/07 to clean-up input
$firstname = RemoveShouting($firstname);
$lastname = RemoveShouting($lastname);
$street_address = RemoveShouting($street_address);
$city = RemoveShouting($city);
$state = strtoupper($state);
$company = RemoveShouting($company);
// End

 

This allows me to paste this in every module (removing variables not needed) making it a much quicker to install ;)

 

Thanks again!

Edited by bob61

Share this post


Link to post
Share on other sites

Hey Bob,

 

Good info, I'll add the checkout_payment_process.php page

 

And.. the set $ names we'll inherit also. Since I started this as a personal "hack" (maily b/c I was fed up with crappy looking customer profiles/invoices) I kind of chopped away at the input fields and came up with the current code but clearly as far as mass users installing the later suggestion is going to be easier!!

 

:) I'll upload the revised install.txt after this writing.

 

Thanks!

-KJ

Share this post


Link to post
Share on other sites
Hey Bob,

 

Good info, I'll add the checkout_payment_process.php page

 

And.. the set $ names we'll inherit also. Since I started this as a personal "hack" (maily b/c I was fed up with crappy looking customer profiles/invoices) I kind of chopped away at the input fields and came up with the current code but clearly as far as mass users installing the later suggestion is going to be easier!!

 

:) I'll upload the revised install.txt after this writing.

 

Thanks!

-KJ

Totally understand about need to clean up user input fields. I took a simpler approach that was about 95% effective for my purposes - your function closed the gap. New install update looks good and hopefully will make it easier for others to use your personal "hack" to add a feature that should be standard with OSCommerce. Happy Holidays! Edited by bob61

Share this post


Link to post
Share on other sites

I've been keeping an eye on this one since it first came out... the first one was a bit code intensive so I waited. But I was glad to see a much easier quicker version to install. It only took me about 5 minutes to do.

 

This contrib was needed, I was getting tired of my customers CAPING everything on site.

 

Cheers,

 

Nigel

Share this post


Link to post
Share on other sites

Glad you guys like it, I think it should be a part of the standard osC also. Hopefully some osC hierarchy will find this and consider it for embedding within the new upcoming version :)

 

Actually the new "easier to install" version is much less time to install, but the original code w/ line edits was actually cleaner (no redundant calls, it just issued the commands right at each input line).

 

BUT for a contribution (and not just my personal hack anymore), this new method is easier and I think many people will find it less confusing :)

 

Anybody having problems or comments... pls post!

 

Glad to help others always! Happy Holidays!

KJ Miller (top_speed)

Share this post


Link to post
Share on other sites
Glad you guys like it, I think it should be a part of the standard osC also. Hopefully some osC hierarchy will find this and consider it for embedding within the new upcoming version :)

 

Actually the new "easier to install" version is much less time to install, but the original code w/ line edits was actually cleaner (no redundant calls, it just issued the commands right at each input line).

 

BUT for a contribution (and not just my personal hack anymore), this new method is easier and I think many people will find it less confusing :)

 

Anybody having problems or comments... pls post!

 

Glad to help others always! Happy Holidays!

KJ Miller (top_speed)

 

 

Hi there,

 

Just wanna say it's working fine. It's really a great contribution and it's already up and running with no errors.

 

Thanks a lot !!!

 

Marcus

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now