Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Contribution Tracker


lildog

Recommended Posts

What kind of problems did it make?

 

 

lildog

 

I found out that in php.ini

 

changing allow_url_fopen = On

to

allow_url_fopen = Off (which is recommended as a security issue)

 

wrecks the contrib_tracker.php function.

 

Any suggestions on a workaround?

Link to comment
Share on other sites

when i try to run the sql file in phpmyadmin i get the following error

 

 

CREATE TABLE contrib_tracker(

 

contr_id int( 11 ) NOT NULL AUTO_INCREMENT ,

contrib_osc_id int( 6 ) NOT NULL ,

contrib_name varchar( 255 ) NOT NULL default '',

contrib_link varchar( 255 ) default '',

config_comments longtext,

STATUS tinyint( 1 ) NOT NULL default '2',

note_created datetime NOT NULL default '0000-00-00 00:00:00',

contr_last_modified datetime NOT NULL default '0000-00-00 00:00:00',

last_update datetime NOT NULL default '0000-00-00 00:00:00',

contrib_vers varchar( 7 ) default '',

contrib_support VARCHAR( 55 ) NULL ;

 

 

 

MySQL said:

 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12

 

any thoughts? :)

Link to comment
Share on other sites

fixed it..

 

CREATE TABLE contrib_tracker(

contr_id int( 11 ) NOT NULL AUTO_INCREMENT ,

contrib_osc_id int( 6 ) NOT NULL ,

contrib_name varchar( 255 ) NOT NULL default '',

contrib_link varchar( 255 ) default '',

config_comments longtext,

STATUS tinyint( 1 ) NOT NULL default '2',

note_created datetime NOT NULL default '0000-00-00 00:00:00',

contr_last_modified datetime NOT NULL default '0000-00-00 00:00:00',

last_update datetime NOT NULL default '0000-00-00 00:00:00',

contrib_vers varchar( 7 ) default '',

contrib_support varchar( 55 ) NULL,

PRIMARY KEY (contr_id)

);

Link to comment
Share on other sites

haha ok, its been a long day and i know i am missing the obvious..

 

i have installed the latest version...but i cant find..

 

****FIND:

tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = PUT YOUR CONFIG ID HERE");

 

REPLACE:

PUT YOUR CONFIG ID HERE with THE CONFIGURATION ID OF the column 'Last Contrib Check' of the confirguration table from PHPMyAdmin

 

where do i find "THE CONFIGURATION ID OF the column 'Last Contrib Check' of the confirguration table"

 

i looked under the config table but i dont see 'last contrib check' :blush:

Link to comment
Share on other sites

tec,

it's in the configuration table. Called Last Contrib Check. Look at the sql. According to your first post it looks like you may have missed some of the sql. it reads: You probably just need to run the last two lines.

 

DROP TABLE IF EXISTS contrib_tracker;

DROP TABLE IF EXISTS `date_status_change`;

 

CREATE TABLE contrib_tracker (

contr_id int(11) NOT NULL auto_increment,

contrib_osc_id int( 6 ) NOT NULL,

contrib_name varchar(255) NOT NULL default '',

contrib_link varchar(255) default '',

config_comments longtext,

status tinyint(1) NOT NULL default '2',

note_created datetime NOT NULL default '0000-00-00 00:00:00',

contr_last_modified datetime NOT NULL default '0000-00-00 00:00:00',

last_update datetime NOT NULL default '0000-00-00 00:00:00',

contrib_vers varchar(7) default '',

contrib_support VARCHAR( 55 ) NULL ;

 

KEY config_id (contr_id)

) TYPE=MyISAM;

 

INSERT INTO contrib_tracker (contr_id, contrib_osc_id, contrib_name,contrib_link, config_comments, status, date_status_change, note_created, contr_last_modified, last_update,contrib_vers) VALUES ('','4815','Contribution Tracker Now Installed','http://addons.oscommerce.com/info/4815', 'Congratulations! Contribution Tracker now installed! You may now delete this Contribution or use it to play around with and get the feel of your new osC contribution.', 1, '0000-00-00 00:00:00', '2005-04-15 12:55:45', '2005-04-15 12:55:45', '2005-04-15','1.6.6e');

INSERT INTO configuration (configuration_id, configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added) values ('', 'Last Contrib Check', 'LAST_CONFIG_CHECK', '', 'Last time checked the OSCommerce official contribution site. ', '0', '50', '2006-03-19 10:57:09', now());

Link to comment
Share on other sites

tec,

does the sql file need to not have any blank lines in it? I usually just paste in the text, but this could be a bug that would prevent others from installing. That's what looks like your problem is...the sql file is halting at the blank lines.

 

lildog

Link to comment
Share on other sites

hiya :)

 

when i opended the sql file in my notepad the last line read as

 

contrib_support varchar( 55 ) NULL,

 

there was no closing line or ) in the file

 

after i added

PRIMARY KEY (contr_id)

 

to the end, the file ran fine

 

 

);

Link to comment
Share on other sites

Tec ,

I just uploaded a new version. I don't know why your sql file is incomplete. Use version 1.73b ONLY. I have been plagued the last week with this contrib. I have been introducing major bugs and wrong files. It was a MAJOR upgrade. Been a long day for me too. The new sql file is definitely complete...thanks for the patience.

 

And to everyone else,

I honestly apologize for the run of unuseable versions ever since v1.7 I have not been able to get it right for some reason. 1.73b should be stable, at least enough to work with. Please keep submitting your bug reports. This will be the last major upgrade for awhile and until this is stable again I will not be adding any more features.

 

Thank you for your patience,

lildog

Link to comment
Share on other sites

Did it run the two inserts queries?

 

hiya :)

 

when i opended the sql file in my notepad the last line read as

 

contrib_support varchar( 55 ) NULL,

 

there was no closing line or ) in the file

 

after i added

PRIMARY KEY (contr_id)

 

to the end, the file ran fine

 

 

);

Link to comment
Share on other sites

  • 4 weeks later...

I have freshly installed 1.7.4 (no previous versions installed), I still had to modify the sql as the last modified date seemed to be dropped from the table but the values were still trying to inject.

 

After working that out, I cannot edit or check for updates. I've double checked that I did all the install steps but I get this error when trying to check for updates:

 

Fatal error: Call to undefined function: contrib_check() in /home/content/x/x/x/xxxxxxx/html/control/contrib_tracker.php on line 187

 

And when I try to save an edit, I get this error:

 

Fatal error: Call to undefined function: old_to_new_url() in /home/content/x/x/x/xxxxxxx/html/control/contrib_tracker.php on line 147

 

Any ideas why? I did install the .../function/conrib_tracker.php files.

 

I also don't clearly understand the instructions for editing the file for the config_ID. I do know what my value is from the database but I can't understand exactly how it should be entered in the .php file. Can someone post an example of there actual code from their working file based on these install instructions:

 

****FIND:

tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = PUT YOUR CONFIG ID HERE");

 

REPLACE:

PUT YOUR CONFIG ID HERE with THE CONFIGURATION ID OF the column 'Last Contrib Check' of the confirguration table from PHPMyAdmin.

 

Is it supposed to look like this:

 

tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = 3889");

with 3889 being the actaul config table value in my database?

 

Also, what did you change in 1.7.5? It would be nice to know which file(s) were changed for an easier update.

 

thanks,

Mark

Link to comment
Share on other sites

you are either missing require(DIR_WS_FUNCTIONS . 'contrib_tracker.php');

in admin/contrib_tracker.php or you put the functions file in the wrong place.

 

your configuration code is correct......get the code from php myadmin. this part is a pain in the butt, sorry. in 1.7.5 i fixed some date functions....look at the update guide it not only tells you what files were changed but what changes were made.

 

lildog

Link to comment
Share on other sites

Any other ideas?

 

I just double checked and I have all the files in thier respective directories and the …/admin/contrib_tracker.php is stock and does call the functions with require(DIR_WS_FUNCTIONS . 'contrib_tracker.php'); although I don’t see any reference to these two functions in the functions files: contrib_check() or old_to_new_url().

 

Shouldn't I see code for these in the functions file? Here is what I have in admin/includes/functions/contrib_tracker.php

 

<?php
/*
 $Id: contrib_tracker.php,v .9 2007/01/08 11:25:32 lildog Exp $

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

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
_________________________________________________________________

Contribution Tracker Functions for osC Admin
By Admin of www.silvermoon-jewelry.com
Based on:
	Admin_notes: Original Code By: Robert Hellemans of www.RuddlesMills.com
	RSS News for OSC
These are LIVE SHOPS - So please, no TEST accounts etc...
We will report you to your ISP if you abuse our websites!
*/
function vWritePageToFile($sHTMLpage, $sTxtfile ) {
	$sh=curl_init($sHTMLpage);
	$hFile=FOpen($sTxtfile, 'w');
	curl_setopt($sh, CURLOPT_FILE, $hFile);
	curl_setopt($sh, CURLOPT_HEADER, 0);
	curl_exec($sh);
	$aCURLinfo = curl_getInfo($sh);
	curl_close($sh);
	FClose($hFile);
}

 function tep_set_contrib_query_status($contr_id, $status,$contr_last_modified) {
// IF THERE IS NO LAST MODIFIED DATE USE NOW ELSE USE THE $contr_last_modified (LAST TIME THE CONTRIB APPEARED IN THE RSS FEED)
if ($contr_last_modified == NULL){
  $last_update_date= strftime($format,time());
}else{
  $last_update_date= $contr_last_modified;
}

if ($status == '0') {
  return tep_db_query("update " . TABLE_CONTRIB_TRACKER . " set status = '0', date_status_change = NULL where contr_id = '" . $contr_id . "'");
} elseif ($status == '1') {
  return tep_db_query("update " . TABLE_CONTRIB_TRACKER . " set status = '1', date_status_change =  now(), last_update='" .$contr_last_modified. "' where contr_id = '" . $contr_id . "'");
} elseif ($status == '2') {
  return tep_db_query("update " . TABLE_CONTRIB_TRACKER . " set status = '3', date_status_change =  now(), last_update='" .$contr_last_modified. "' where contr_id = '" . $contr_id . "'");
} else {
  return -1;
}
 }

?>

 

you are either missing require(DIR_WS_FUNCTIONS . 'contrib_tracker.php');

in admin/contrib_tracker.php or you put the functions file in the wrong place.

 

your configuration code is correct......get the code from php myadmin. this part is a pain in the butt, sorry. in 1.7.5 i fixed some date functions....look at the update guide it not only tells you what files were changed but what changes were made.

 

lildog

Link to comment
Share on other sites

mmph....I am sorry. v. 1.7.4 and 1.7.5 use the wrong functions file. I will upload a new version now. Thank you for pointing that out....multiple times. I just assumed the correct file was there.

lildog

Edited by lildog
Link to comment
Share on other sites

Okay,

 

I think those function files in 1.7.6 are complete now although they are swapped with each other. The larger file belongs in admin. The ...catalog/includes/functions/contrib_tracker.php and the catalog/admin/includes/functions/contrib_tracker.php files need to be swapped with each other.

 

Can you also check the .sql file, I'm pretty sure it still has some errors in it. I had to change the semi colon for a comma where is says contrib_support VARCHAR( 55 ) NULL ; and I also added the table column for date_status_change because there are values for this column in the INSERT line at the bottom of the sql file; if this column is not needed and should be dropped, then the INSERT values need to be deleted as well. Here is the working SQL file I used with these changes:

 

DROP TABLE IF EXISTS contrib_tracker;
DROP TABLE IF EXISTS `date_status_change`;
CREATE TABLE contrib_tracker (
 contr_id int(11) NOT NULL auto_increment,
 contrib_osc_id int( 6 ) NOT NULL, 
 contrib_name varchar(255) NOT NULL default '',
 contrib_link varchar(255) default '',
 config_comments longtext,
 status tinyint(1) NOT NULL default '2',
 date_status_change datetime NOT NULL default '0000-00-00 00:00:00',
 note_created datetime NOT NULL default '0000-00-00 00:00:00',
 contr_last_modified datetime NOT NULL default '0000-00-00 00:00:00',
 last_update datetime NOT NULL default '0000-00-00 00:00:00',
 contrib_vers varchar(7) default '',
 contrib_support VARCHAR( 55 ) NULL ,
 KEY config_id (contr_id)) TYPE=MyISAM;
INSERT INTO contrib_tracker (contr_id, contrib_osc_id, contrib_name,contrib_link, config_comments, status, date_status_change, note_created, contr_last_modified, last_update,contrib_vers) VALUES ('','4815','Contribution Tracker Now Installed','http://addons.oscommerce.com/info/4815', 'Congratulations! Contribution Tracker now installed! You may now delete this Contribution or use it to play around with and get the feel of your new osC contribution.', 1, '0000-00-00 00:00:00', '2005-04-15 12:55:45', '2005-04-15 12:55:45', '2005-04-15','1.6.6e');
INSERT INTO configuration (configuration_id, configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added) values ('', 'Last Contrib Check', 'LAST_CONFIG_CHECK', '', 'Last time checked the OSCommerce official contribution site. ', '0', '50', '2006-03-19 10:57:09', now());

 

Did or can you roll the changes of 1.7.5 in to this latest version as well? It would also be nice to clarify how to make the configuration ID changes to the ...catalog/admin/contrib_tracker.php file as well. maybe change the instructions and .php file to say something like:

 

STEP 9:

It is necessary to tell this contribution what the database configuration ID is. This is done by finding the table value in mysql database after running the contrib_tracker.sql on your database.

 

After running the contrib_tracker.sql in your database, browse the configuration table and sort the configuration_id column in descending order so that the newly added "Last Contrib Check" value is visible at the top of the column. Make note of the configuration_id number for use in the next step.

 

in catalog/admin/contrib_tracker.php

 

****FIND:

tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = YOURconfig_id");

 

****REPLACE:

YOURconfig_id

 

****WITH

the number you made note of in the step above.

Thanks for this contribution, I think it is great! P.S. Let me know if you want a break and I can can roll these changes up and post them as 1.7.7

 

name='lildog' date='Oct 15 2008, 04:56 PM' post='1322570']

mmph....I am sorry. v. 1.7.4 and 1.7.5 use the wrong functions file. I will upload a new version now. Thank you for pointing that out....multiple times. I just assumed the correct file was there.

lildog

Link to comment
Share on other sites

Hi Lildog,

 

Great work on this contribution. I am finding several things that I don't understand or don't seem to be working. I'm short on time right this moment but I'll make a list and post it soon; maybe you will be able to help work these things out.

 

Thanks again.

-Mark

Link to comment
Share on other sites

I few versions back I did a major rewrite and haven't gotten it right since. Let me know what problems there are and I will fix them. Thank you for your reports....

 

lildog

 

Hi Lildog,

 

Great work on this contribution. I am finding several things that I don't understand or don't seem to be working. I'm short on time right this moment but I'll make a list and post it soon; maybe you will be able to help work these things out.

 

Thanks again.

-Mark

Link to comment
Share on other sites

Mark I will roll these into v1.7.7. I honestly thank you for reporting these problems. The code works just a few typos. But you are the only one that reported it. Before you at least the last two versions are garbage, which I do not want. If you have any other problems feel free to upload a new version, just please try to keep it neat and include an update guide. BTW, I believe I did away with the date_status_change column...it was left over from an earlier version. It really is a good contrib...I like to have the latest version installed so when a major bug fix rolls around or major feature added it is usually a snap to install.

 

Again thanks for pointing out the errors..if you have any more either upload a new version or let me know.

 

lildog

Link to comment
Share on other sites

I just installed v1.7.7 and have a bug fix and a suggestion.

 

Bug: Using the Quick Add feature, contributions with special characters in their titles cause an SQL error. Example: 824, Who's Online Enhancement

 

Fix:

This was fixed long ago for the manual addition case by using the PHP function addslashes(), which escapes special characters for insertion into databases. I have fixed this for the Quick Add case here:

 

In catalog/admin/contrib_tracker.php, find:

		$contrib_query = "insert into " . TABLE_CONTRIB_TRACKER . " (contr_id, contrib_osc_id, contrib_name, contrib_link, config_comments, note_created, contr_last_modified, status, last_update, contrib_vers) values ('','" . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . $contrib_name . "','" . $contribsURL.$HTTP_POST_VARS['contrib_quick_insert'] . "','" . '' . "',  '" .  $atstamp . "', '".$last_osc_update."', '".$status."', '" .	  $utstamp . "', '" . $newvers . "' )";

Replace with:

		$contrib_query = "insert into " . TABLE_CONTRIB_TRACKER . " (contr_id, contrib_osc_id, contrib_name, contrib_link, config_comments, note_created, contr_last_modified, status, last_update, contrib_vers) values ('','" . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . addslashes($contrib_name) . "','" . $contribsURL . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . '' . "',  '" .  $atstamp . "', '".$last_osc_update."', '".$status."', '" .	  $utstamp . "', '" . $newvers . "' )";

 

Suggestion: The requirement (installation step 9) to record the configuration_id of the Contribution Tracker installation in the code is cumbersome and trips up a number of users. It also makes the file installation dependent. A better method of updating this configuration key is to refer to it by its name, which is static.

 

In catalog/admin/contrib_tracker.php, find:

	  $contrib_query = "update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = THE CONFIGURATION ID OF the column 'Last Contrib Check' from PHPMyAdmin";

Replace with:

	  $contrib_query = "update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_key = LAST_CONFIG_CHECK";

 

 

--Glen

Link to comment
Share on other sites

I updated this contribution from an earlier version.

 

When I try to update, I get the following error.

 

Fatal error: Call to a member function add_session() on a non-object in /home/marquard/public_html/shop/admin/includes/functions/contrib_tracker.php on line 86

 

Note: I was able to update 2 or 3 of the listed contributions in admin, but the majority of them when I click on update, I get the above message

Link to comment
Share on other sites

Lines 80 - 91

 

function old_to_new_url($URL){

//convert old links to new ones

$findme="www.oscommerce.com/community/contributions";

$pos = strpos($URL, $findme);

if ($pos){

$new_URL = str_replace("http://www.oscommerce.com/community/contributions,", "http://addons.oscommerce.com/info/", $URL);

$messageStack->add_session(MESSAGE_LINKCHANGE_SUCCESS, 'success');

}else{

$new_URL=$URL;

}

return $new_URL;

}

 

 

Line 86 starts with $messageStack

Link to comment
Share on other sites

Thanks Glen! I always hated step 9! And thank you for pointing out he add slashes fix....again. When did I lose that......so many edits...so many files....I will add the fixes in.

 

lildog

 

I just installed v1.7.7 and have a bug fix and a suggestion.

 

Bug: Using the Quick Add feature, contributions with special characters in their titles cause an SQL error. Example: 824, Who's Online Enhancement

 

Fix:

This was fixed long ago for the manual addition case by using the PHP function addslashes(), which escapes special characters for insertion into databases. I have fixed this for the Quick Add case here:

 

In catalog/admin/contrib_tracker.php, find:

		$contrib_query = "insert into " . TABLE_CONTRIB_TRACKER . " (contr_id, contrib_osc_id, contrib_name, contrib_link, config_comments, note_created, contr_last_modified, status, last_update, contrib_vers) values ('','" . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . $contrib_name . "','" . $contribsURL.$HTTP_POST_VARS['contrib_quick_insert'] . "','" . '' . "',  '" .  $atstamp . "', '".$last_osc_update."', '".$status."', '" .	  $utstamp . "', '" . $newvers . "' )";

Replace with:

		$contrib_query = "insert into " . TABLE_CONTRIB_TRACKER . " (contr_id, contrib_osc_id, contrib_name, contrib_link, config_comments, note_created, contr_last_modified, status, last_update, contrib_vers) values ('','" . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . addslashes($contrib_name) . "','" . $contribsURL . $HTTP_POST_VARS['contrib_quick_insert'] . "','" . '' . "',  '" .  $atstamp . "', '".$last_osc_update."', '".$status."', '" .	  $utstamp . "', '" . $newvers . "' )";

 

Suggestion: The requirement (installation step 9) to record the configuration_id of the Contribution Tracker installation in the code is cumbersome and trips up a number of users. It also makes the file installation dependent. A better method of updating this configuration key is to refer to it by its name, which is static.

 

In catalog/admin/contrib_tracker.php, find:

	  $contrib_query = "update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_id = THE CONFIGURATION ID OF the column 'Last Contrib Check' from PHPMyAdmin";

Replace with:

	  $contrib_query = "update " . TABLE_CONFIGURATION . " set configuration_value = '" . $HTTP_POST_VARS['lastcheck'] . "', last_modified = now() where configuration_key = LAST_CONFIG_CHECK";

 

 

--Glen

Link to comment
Share on other sites

Thanks Glen! I always hated step 9! And thank you for pointing out he add slashes fix....again. When did I lose that......so many edits...so many files....I will add the fixes in.

 

lildog

 

lildog,

I've spent a few hours adding tons of little fixes to make Contrib Tracker's HTML output pass the W3C HTML validation service. I'm almost done with it and would be happy to pass it along so that you can put it in an update. I'm somewhat obsessive about that. But the osC releases have never been concerned about it, either; I sometimes wonder why I bother.

 

The addslashes fix was present for manual updates, but not present for the Quick Add feature. It may not have ever been there. I don't know, as I hadn't been following this contribution before last week.

 

--Glen

Link to comment
Share on other sites

You are correct, it wasn't there. I did a major upgrade a month or so ago and screwed everything up.....I thank you very much for the help. When you complete your edits, go ahead and upload it to the contrib page, if you don't want to do that let me know and I will give you my email.

 

lildog

Link to comment
Share on other sites

I just posted v1.7.8 of Contribution Tracker with a bunch of updates

 

+ Changed config update to use key LAST_CONFIG_CHECK instead of raw configuration_id, which is installation dependent

Removed old step 9 from installation instructions and moved succeeding steps up.

+ Fixed Quick Add so it works with contributions with apostrophes in their titles

+ Rebuilt all tables in body text to ensure correct HTML structure under all conditions

+ Re-created missing Javascript function toggleDivBlk() to make "info" links work in editor

+ Modified logic to suppress search, quick add, and last update boxes in edit and preview modes

+ Escaped a ton of ampersands to "&" for HTML 4.01 Transitional DTD conformance

+ (Note that some modes still generate non-conforming HTML due to minor bugs in osC functions tep_draw_form() and tep_draw_textarea_field() )

+ Simplified status icon display code

+ Cleaned up some text in the English language file

 

 

The Danish language file will need a couple of minor updates

 

 

Enjoy!

 

--Glen

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...