<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=ZenCart_data_import_-_admin%2Fcustom_menu.php</id>
	<title>ZenCart data import - admin/custom menu.php - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=ZenCart_data_import_-_admin%2Fcustom_menu.php"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;action=history"/>
	<updated>2026-06-26T05:48:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=7250&amp;oldid=prev</id>
		<title>Woozle: /* Source */ update: image assignment now working</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=7250&amp;oldid=prev"/>
		<updated>2007-05-15T14:04:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Source: &lt;/span&gt; update: image assignment now working&lt;/p&gt;
&lt;a href=&quot;https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;amp;diff=7250&amp;amp;oldid=6798&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6798&amp;oldid=prev</id>
		<title>Woozle: /* Navigation */ $zc prefix for consistency with parent page</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6798&amp;oldid=prev"/>
		<updated>2007-03-16T11:18:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Navigation: &lt;/span&gt; $zc prefix for consistency with parent page&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:18, 16 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Navigation==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Navigation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[computing]]: [[software]]: [[ZenCart]]: [[importing data into ZenCart|importing data]]: &#039;&#039;&#039;admin/custom_menu.php&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[computing]]: [[software]]: [[ZenCart]]: [[importing data into ZenCart|importing data]]: &#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{faint|$zc}}/&lt;/ins&gt;admin/custom_menu.php&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6757&amp;oldid=prev</id>
		<title>Woozle: /* Navigation */ it&#039;s actually an underline</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6757&amp;oldid=prev"/>
		<updated>2007-03-10T17:31:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Navigation: &lt;/span&gt; it&amp;#039;s actually an underline&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:31, 10 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Navigation==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Navigation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[computing]]: [[software]]: [[ZenCart]]: [[importing data into ZenCart|importing data]]: &#039;&#039;&#039;admin/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;custom menu&lt;/del&gt;.php&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[computing]]: [[software]]: [[ZenCart]]: [[importing data into ZenCart|importing data]]: &#039;&#039;&#039;admin/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;custom_menu&lt;/ins&gt;.php&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Overview==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This file does the actual import. It contains a number of classes which might later be split off into separate PHP files, as they model particular aspects of the ZenCart data.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This file does the actual import. It contains a number of classes which might later be split off into separate PHP files, as they model particular aspects of the ZenCart data.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6754&amp;oldid=prev</id>
		<title>Woozle: /* Source */ syntax highlighting</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6754&amp;oldid=prev"/>
		<updated>2007-03-10T16:41:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Source: &lt;/span&gt; syntax highlighting&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:41, 10 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This file does the actual import. It contains a number of classes which might later be split off into separate PHP files, as they model particular aspects of the ZenCart data.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This file does the actual import. It contains a number of classes which might later be split off into separate PHP files, as they model particular aspects of the ZenCart data.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Source==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Source==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;php&lt;/ins&gt;&amp;gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// +----------------------------------------------------------------------+&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// +----------------------------------------------------------------------+&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l804&quot;&gt;Line 804:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 803:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;?&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;?&amp;gt;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;php&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6753&amp;oldid=prev</id>
		<title>Woozle: New page: ==Navigation== computing: software: ZenCart: importing data: &#039;&#039;&#039;admin/custom menu.php&#039;&#039;&#039; ==Overview== This file does the actual import. It conta...</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=ZenCart_data_import_-_admin/custom_menu.php&amp;diff=6753&amp;oldid=prev"/>
		<updated>2007-03-10T16:16:20Z</updated>

		<summary type="html">&lt;p&gt;New page: ==Navigation== &lt;a href=&quot;/computing&quot; title=&quot;computing&quot;&gt;computing&lt;/a&gt;: &lt;a href=&quot;/software&quot; title=&quot;software&quot;&gt;software&lt;/a&gt;: &lt;a href=&quot;/ZenCart&quot; title=&quot;ZenCart&quot;&gt;ZenCart&lt;/a&gt;: &lt;a href=&quot;/importing_data_into_ZenCart&quot; title=&quot;importing data into ZenCart&quot;&gt;importing data&lt;/a&gt;: &amp;#039;&amp;#039;&amp;#039;admin/custom menu.php&amp;#039;&amp;#039;&amp;#039; ==Overview== This file does the actual import. It conta...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Navigation==&lt;br /&gt;
[[computing]]: [[software]]: [[ZenCart]]: [[importing data into ZenCart|importing data]]: &amp;#039;&amp;#039;&amp;#039;admin/custom menu.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
==Overview==&lt;br /&gt;
This file does the actual import. It contains a number of classes which might later be split off into separate PHP files, as they model particular aspects of the ZenCart data.&lt;br /&gt;
==Source==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// |zen-cart Open Source E-commerce                                       |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | Copyright (c) 2003 The zen-cart developers                           |&lt;br /&gt;
// |                                                                      |&lt;br /&gt;
// | http://www.zen-cart.com/index.php                                    |&lt;br /&gt;
// |                                                                      |&lt;br /&gt;
// | Portions Copyright (c) 2003 osCommerce                               |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
// | This source file is subject to version 2.0 of the GPL license,       |&lt;br /&gt;
// | that is bundled with this package in the file LICENSE, and is        |&lt;br /&gt;
// | available through the world-wide-web at the following url:           |&lt;br /&gt;
// | http://www.zen-cart.com/license/2_0.txt.                             |&lt;br /&gt;
// | If you did not receive a copy of the zen-cart license and are unable |&lt;br /&gt;
// | to obtain it through the world-wide-web, please send a note to       |&lt;br /&gt;
// | license@zen-cart.com so we can mail you a copy immediately.          |&lt;br /&gt;
// +----------------------------------------------------------------------+&lt;br /&gt;
//&lt;br /&gt;
/*&lt;br /&gt;
 2006-09-17 (wzl) handlers for &amp;quot;Custom&amp;quot; menu. Used modules.php as model.&lt;br /&gt;
&lt;br /&gt;
 SET values:&lt;br /&gt;
	prod_entry (default): bulk product entry&lt;br /&gt;
	ACTION values:&lt;br /&gt;
		(none): show bulk product entry form&lt;br /&gt;
		check: data is being submitted for preview&lt;br /&gt;
		commit: data is being submitted for final commit (update database)&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
  require(&amp;#039;includes/application_top.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_SET_PROD_ENTRY&amp;#039;,&amp;#039;prod_entry&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_SAVE_DATA&amp;#039;,&amp;#039;save&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_PROD_DATA_NAME&amp;#039;,&amp;#039;products&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_ACT_CHECK&amp;#039;,&amp;#039;check&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_ACT_COMMIT&amp;#039;,&amp;#039;commit&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_BTN_CHECK&amp;#039;,&amp;#039;Preview Changes&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_MODULE_BTN_COMMIT&amp;#039;,&amp;#039;COMMIT&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  define(&amp;#039;URL_ISBN_SEARCH&amp;#039;,&amp;#039;http://www.abebooks.com/servlet/SearchResults?isbn=&amp;lt;&amp;lt;1&amp;gt;&amp;gt;&amp;#039;);&lt;br /&gt;
  define(&amp;#039;CUSTOM_DEFAULT_SUPPLIER&amp;#039;,&amp;#039;Jubilee&amp;#039;);  // when import data supplier field is empty&lt;br /&gt;
  define(&amp;#039;CUSTOM_DEFAULT_CATEGORY&amp;#039;,&amp;#039;Unfiled&amp;#039;);  // when imported category field is empty&lt;br /&gt;
&lt;br /&gt;
  define(&amp;#039;TABLE_CUSTOM_IMPORT_PROD&amp;#039;,DB_PREFIX.&amp;#039;custom_import_prod&amp;#039;);&lt;br /&gt;
  define(&amp;#039;TABLE_CUSTOM_IMPORT_MFGRS&amp;#039;,DB_PREFIX.&amp;#039;custom_import_mfgrs&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  // new item&lt;br /&gt;
  define(&amp;#039;HTML_STATUS_NEW&amp;#039;, &amp;#039;&amp;lt;font color=&amp;quot;#ff7f00&amp;quot;&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;#039;);&lt;br /&gt;
  // item is saved in list&lt;br /&gt;
  define(&amp;#039;HTML_STATUS_NOTED&amp;#039;, &amp;#039;&amp;lt;font color=&amp;quot;#7f7f7f&amp;quot;&amp;gt;&amp;lt;i&amp;gt;ok&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&amp;#039;);&lt;br /&gt;
  // item found in database&lt;br /&gt;
  define(&amp;#039;HTML_STATUS_EXISTS&amp;#039;, &amp;#039;&amp;lt;font color=&amp;quot;#006600&amp;quot;&amp;gt;found&amp;lt;/font&amp;gt;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  $set = (isset($_GET[&amp;#039;set&amp;#039;]) ? $_GET[&amp;#039;set&amp;#039;] : &amp;#039;&amp;#039;);&lt;br /&gt;
  $button = (isset($_POST[&amp;#039;action&amp;#039;]) ? $_POST[&amp;#039;action&amp;#039;] : &amp;#039;&amp;#039;);&lt;br /&gt;
  switch ($button) {&lt;br /&gt;
    case CUSTOM_MODULE_BTN_CHECK: $action=CUSTOM_MODULE_ACT_CHECK; break;&lt;br /&gt;
    case CUSTOM_MODULE_BTN_COMMIT: $action=CUSTOM_MODULE_ACT_COMMIT; break;&lt;br /&gt;
    default: $action=&amp;#039;&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 After page has displayed, this handles the user&amp;#039;s input&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
  switch ($action) {&lt;br /&gt;
    case CUSTOM_MODULE_SAVE_DATA:&lt;br /&gt;
      $doSave = true;&lt;br /&gt;
&lt;br /&gt;
// new SQL code for updating products:&lt;br /&gt;
	$sqlUpdateProd = &amp;quot;update &amp;quot; . TABLE_PRODUCTS . &amp;quot; set configuration_value = &amp;#039;&amp;quot; . $value . &amp;quot;&amp;#039; where configuration_key = &amp;#039;&amp;quot; . $key .&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
    case &amp;#039;enter&amp;#039;:	// showing data entry form, so this stage (data processing) does nothing&lt;br /&gt;
    default:&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!doctype html public &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html &amp;lt;?php echo HTML_PARAMS; ?&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=&amp;lt;?php echo CHARSET; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;&amp;lt;?php echo TITLE; ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;includes/stylesheet.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;includes/cssjsmenuhover.css&amp;quot; media=&amp;quot;all&amp;quot; id=&amp;quot;hoverJS&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; src=&amp;quot;includes/menu.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; src=&amp;quot;includes/general.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!--&lt;br /&gt;
  function init()&lt;br /&gt;
  {&lt;br /&gt;
    cssjsmenu(&amp;#039;navbar&amp;#039;);&lt;br /&gt;
    if (document.getElementById)&lt;br /&gt;
    {&lt;br /&gt;
      var kill = document.getElementById(&amp;#039;hoverJS&amp;#039;);&lt;br /&gt;
      kill.disabled = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // --&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- header //--&amp;gt;&lt;br /&gt;
&amp;lt;?php require(DIR_WS_INCLUDES . &amp;#039;header.php&amp;#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- header_eof //--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- body //--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This feature is currently being debugged; do not use yet. &amp;lt;i&amp;gt;N. Staddon 2006-10-11&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SET=&amp;lt;?php echo $set?&amp;gt; ACTION=&amp;lt;?php echo $action?&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  switch ($set) {&lt;br /&gt;
    case CUSTOM_MODULE_SET_PROD_ENTRY:&lt;br /&gt;
    default:&lt;br /&gt;
      switch ($action) {&lt;br /&gt;
        case CUSTOM_MODULE_ACT_CHECK:&lt;br /&gt;
	  echo &amp;quot;&amp;lt;b&amp;gt;Previewing entered data:&amp;lt;/b&amp;gt;&amp;quot;;&lt;br /&gt;
	  ProcessData(false);&lt;br /&gt;
        break;&lt;br /&gt;
        case CUSTOM_MODULE_ACT_COMMIT:&lt;br /&gt;
	  echo &amp;quot;&amp;lt;b&amp;gt;Saving entered data:&amp;lt;/b&amp;gt;&amp;quot;;&lt;br /&gt;
	  $hide_form = 1;&lt;br /&gt;
	  ProcessData(true);&lt;br /&gt;
        break;&lt;br /&gt;
        default:&lt;br /&gt;
      }&lt;br /&gt;
/*&lt;br /&gt;
 DEFAULT: show bulk product entry form&lt;br /&gt;
 check: data is being submitted for preview&lt;br /&gt;
 commit: data is being submitted for final commit (update database)&lt;br /&gt;
*/&lt;br /&gt;
  &lt;br /&gt;
// always show data entry form:&lt;br /&gt;
  }&lt;br /&gt;
  if (!$hide_form) {&lt;br /&gt;
    $htmlSep = &amp;#039;&amp;lt;font color=&amp;quot;#7f7f7f&amp;quot;&amp;gt;&amp;amp;lt;tab&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;#039;;&lt;br /&gt;
    echo zen_draw_form(&amp;#039;prod_entry&amp;#039;, CUSTOM_MENU_MODULE);&lt;br /&gt;
    echo &amp;#039;&amp;lt;center&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td colspan=2&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;Enter product data here:&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;i&amp;gt;Format is:&amp;lt;/i&amp;gt; &amp;#039;&lt;br /&gt;
      .&amp;#039;&amp;lt;b&amp;gt;ID string&amp;lt;/b&amp;gt;&amp;#039;.$htmlSep&lt;br /&gt;
      .&amp;#039;(ignored)&amp;#039;.$htmlSep&lt;br /&gt;
      .&amp;#039;&amp;lt;b&amp;gt;Title&amp;lt;/b&amp;gt;&amp;#039;.$htmlSep&lt;br /&gt;
      .&amp;#039;(ignored)&amp;#039;.$htmlSep&lt;br /&gt;
      .&amp;#039;&amp;lt;b&amp;gt;Supplier&amp;lt;/b&amp;gt;&amp;#039;.$htmlSep&lt;br /&gt;
      .&amp;#039;&amp;lt;b&amp;gt;Price&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;center&amp;gt;&amp;#039;;&lt;br /&gt;
    echo zen_draw_textarea_field(CUSTOM_MODULE_PROD_DATA_NAME, &amp;#039;&amp;#039;, &amp;#039;100&amp;#039;, &amp;#039;20&amp;#039;);&lt;br /&gt;
// later on this can use Zen functions for more slickness, but for now this should work:&lt;br /&gt;
    echo &amp;#039;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;&amp;#039;.CUSTOM_MODULE_BTN_CHECK.&amp;#039;&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;&amp;#039;.CUSTOM_MODULE_BTN_COMMIT.&amp;#039;&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;input type=&amp;quot;reset&amp;quot; value=&amp;quot;Undo all edits&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/center&amp;gt;&amp;#039;;&lt;br /&gt;
    echo &amp;#039;&amp;lt;/form&amp;gt;&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- body_eof //--&amp;gt;&lt;br /&gt;
&amp;lt;!-- footer //--&amp;gt;&lt;br /&gt;
&amp;lt;?php require(DIR_WS_INCLUDES . &amp;#039;footer.php&amp;#039;); ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- footer_eof //--&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(DIR_WS_INCLUDES . &amp;#039;application_bottom.php&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
function Pluralize($iQty, $iSing=&amp;#039;&amp;#039;, $iPlur=&amp;#039;s&amp;#039;) {&lt;br /&gt;
  if ($iQty == 1) {&lt;br /&gt;
    return $iSing;&lt;br /&gt;
  } else {&lt;br /&gt;
    return $iPlur;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ProcessData($iCommit)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  $data_raw = $_POST[CUSTOM_MODULE_PROD_DATA_NAME];&lt;br /&gt;
  $data_lines = explode(&amp;quot;\n&amp;quot;,$data_raw);&lt;br /&gt;
  echo &amp;#039;&amp;lt;table&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th colspan=5&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th colspan=3 bgcolor=&amp;quot;#eeeeee&amp;quot;&amp;gt;Data Entry Status&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Catg&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Supplier&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Price&amp;lt;/th&amp;gt;&amp;lt;th bgcolor=&amp;quot;#eeeeee&amp;quot;&amp;gt;Supplier&amp;lt;/th&amp;gt;&amp;lt;th bgcolor=&amp;quot;#eeeeee&amp;quot;&amp;gt;Title&amp;lt;/th&amp;gt;&amp;lt;th bgcolor=&amp;quot;#eeeeee&amp;quot;&amp;gt;Category&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  $ctrTitlesNew = 0;&lt;br /&gt;
  $ctrTitlesOld = 0;&lt;br /&gt;
&lt;br /&gt;
  foreach ($data_lines as $data_line) {&lt;br /&gt;
// create title object for each import line. Title object should do all the lookups and printing and stuff.&lt;br /&gt;
&lt;br /&gt;
    if ($data_line) {&lt;br /&gt;
      $objTitle = clsTitles::Import($data_line);&lt;br /&gt;
&lt;br /&gt;
      $ctrSuppFnd = clsSuppliers::Count(); // # of suppliers found&lt;br /&gt;
      $ctrSuppNew = clsSuppliers::CountNew(); // # of *new* suppliers&lt;br /&gt;
      $ctrCatgFnd = clsCategories::Count(); // # of new categories&lt;br /&gt;
      $ctrCatgNew = clsCategories::CountNew(); // # of new categories&lt;br /&gt;
&lt;br /&gt;
      echo &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;.$objTitle-&amp;gt;TableRowCells().&amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  if ($ctrSuppNew) {&lt;br /&gt;
    $htmlSuppList = &amp;#039;: &amp;#039;.clsSuppliers::DoListNew(&amp;#039;&amp;lt;b&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/b&amp;gt;&amp;#039;,&amp;#039;, &amp;#039;);&lt;br /&gt;
    $htmlSuppList .= &amp;#039; OLD: &amp;#039;.clsSuppliers::DoListOld(&amp;#039;&amp;lt;b&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/b&amp;gt;&amp;#039;,&amp;#039;, &amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  if ($ctrCatgNew) {&lt;br /&gt;
    $htmlCatgList = &amp;#039;: &amp;#039;.clsCategories::DoListNew(&amp;#039;&amp;lt;b&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/b&amp;gt;&amp;#039;,&amp;#039;, &amp;#039;);&lt;br /&gt;
    $htmlCatgList .= &amp;#039; OLD: &amp;#039;.clsCategories::DoListOld(&amp;#039;&amp;lt;b&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/b&amp;gt;&amp;#039;,&amp;#039;, &amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  echo &amp;#039;&amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;big&amp;gt;Processed &amp;lt;b&amp;gt;&amp;#039;.$ctrLines.&amp;#039;&amp;lt;/b&amp;gt; lines:&amp;lt;/big&amp;gt;&amp;lt;ul&amp;gt;&amp;#039;&lt;br /&gt;
    .&amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;#039;.clsTitles::Records()-&amp;gt;CountNew().&amp;#039;&amp;lt;/b&amp;gt; new titles to add&amp;#039;&lt;br /&gt;
    .&amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;#039;.clsTitles::Records()-&amp;gt;CountOld().&amp;#039;&amp;lt;/b&amp;gt; titles to update &amp;lt;i&amp;gt;(ignored for now)&amp;lt;/i&amp;gt;&amp;#039;&lt;br /&gt;
    .&amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;#039;.$ctrSuppFnd.&amp;#039;&amp;lt;/b&amp;gt; supplier&amp;#039;.Pluralize($ctrSuppFnd).&amp;#039; in import, &amp;lt;b&amp;gt;&amp;#039;.$ctrSuppNew.&amp;#039;&amp;lt;/b&amp;gt; new&amp;#039;.$htmlSuppList&lt;br /&gt;
    .&amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;#039;.$ctrCatgFnd.&amp;#039;&amp;lt;/b&amp;gt; categor&amp;#039;.Pluralize($ctrCatgFnd,&amp;#039;y&amp;#039;,&amp;#039;ies&amp;#039;).&amp;#039; in import, &amp;lt;b&amp;gt;&amp;#039;.$ctrCatgNew.&amp;#039;&amp;lt;/b&amp;gt; new&amp;#039;.$htmlCatgList&lt;br /&gt;
    .&amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;b&amp;gt;Adding suppliers&amp;lt;/b&amp;gt;: &amp;#039;.clsSuppliers::Save($iCommit).&amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;b&amp;gt;Adding categories&amp;lt;/b&amp;gt;: &amp;#039;.clsCategories::Save($iCommit).&amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
  echo &amp;#039;&amp;lt;b&amp;gt;Adding titles&amp;lt;/b&amp;gt;: &amp;#039;.clsTitles::Save($iCommit).&amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
function MakeKey($iStr) {&lt;br /&gt;
  return preg_replace(&amp;#039;/[ -\.,;]*/&amp;#039;,&amp;#039;&amp;#039;,strtolower($iStr));&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 ===== CLASSES =====&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
class clsRecords {&lt;br /&gt;
  public $List;		// actual unique records&lt;br /&gt;
  public $qtyNew;	// number of *new* records found during import&lt;br /&gt;
  public $qtyOld;&lt;br /&gt;
&lt;br /&gt;
  public function Count() {&lt;br /&gt;
    return Count($this-&amp;gt;List);&lt;br /&gt;
  }&lt;br /&gt;
  public function CountOld() {&lt;br /&gt;
    if ($this-&amp;gt;qtyOld) {&lt;br /&gt;
      return $this-&amp;gt;qtyOld;&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public function CountNew() {&lt;br /&gt;
    if ($this-&amp;gt;qtyNew) {&lt;br /&gt;
      return $this-&amp;gt;qtyNew;&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public function AddObject($iName,$iObj) {&lt;br /&gt;
    if (!$this-&amp;gt;List[$iName]) {&lt;br /&gt;
      $this-&amp;gt;List[$iName] = $iObj;&lt;br /&gt;
    }&lt;br /&gt;
    if ($iObj-&amp;gt;isFound) {&lt;br /&gt;
      $this-&amp;gt;qtyOld++;&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;qtyNew++;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public function Exists($iName) {&lt;br /&gt;
    if (is_array($this-&amp;gt;List)) {&lt;br /&gt;
      $isSet = isset($this-&amp;gt;List[$iName]);&lt;br /&gt;
      return $isSet;&lt;br /&gt;
    } else {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListNew($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    foreach ($this-&amp;gt;List as $obj) {&lt;br /&gt;
      if (!$obj-&amp;gt;isFound) {&lt;br /&gt;
        if ($out) {&lt;br /&gt;
          $out .= $iSep;&lt;br /&gt;
        }&lt;br /&gt;
        $out .= $iPfx.$obj-&amp;gt;Name.$iSfx;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return $out;&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListOld($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    foreach ($this-&amp;gt;List as $obj) {&lt;br /&gt;
      if ($obj-&amp;gt;isFound) {&lt;br /&gt;
        if ($out) {&lt;br /&gt;
          $out .= $iSep;&lt;br /&gt;
        }&lt;br /&gt;
        $out .= $iPfx.$obj-&amp;gt;Name.$iSfx;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return $out;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsTitles {&lt;br /&gt;
  private static $objRecords;&lt;br /&gt;
&lt;br /&gt;
  public function Records() {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$objRecords;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function Import($iLine) {&lt;br /&gt;
    $obj = new clsTitle;&lt;br /&gt;
    $obj-&amp;gt;ImportLine($iLine);&lt;br /&gt;
    if (!$obj-&amp;gt;isCatg) {&lt;br /&gt;
      self::Records()-&amp;gt;AddObject($obj-&amp;gt;ImportKey,$obj);&lt;br /&gt;
    }&lt;br /&gt;
    return $obj;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function Save($iCommit) {&lt;br /&gt;
    global $db;&lt;br /&gt;
    $result = &amp;#039;&amp;lt;ul&amp;gt;&amp;#039;;&lt;br /&gt;
    foreach (self::Records()-&amp;gt;List as $obj) {&lt;br /&gt;
      $result .= $obj-&amp;gt;Save($iCommit);&lt;br /&gt;
    }&lt;br /&gt;
    $result .= &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
    return $result;&lt;br /&gt;
  }&lt;br /&gt;
  public function Count() {&lt;br /&gt;
    return self::Records()-&amp;gt;Count();&lt;br /&gt;
  }&lt;br /&gt;
  public function CountNew() {&lt;br /&gt;
    return self::Records()-&amp;gt;CountNew();&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListNew($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    return self::Records()-&amp;gt;DoListNew($iPfx,$iSfx,$iSep);&lt;br /&gt;
  }&lt;br /&gt;
  protected function InitRecords() {&lt;br /&gt;
    if (!isset(self::$objRecords)) {&lt;br /&gt;
      self::$objRecords = new clsRecords;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsTitle {&lt;br /&gt;
  public $ImportKey;&lt;br /&gt;
  private $intID;&lt;br /&gt;
  public $Name;&lt;br /&gt;
  public $Price;&lt;br /&gt;
  public $Supplier;&lt;br /&gt;
  public $SuppImp;&lt;br /&gt;
  public $Category;&lt;br /&gt;
  public $CatgImp;&lt;br /&gt;
  public $isCatg;&lt;br /&gt;
// calculated fields&lt;br /&gt;
  public $ISBN;&lt;br /&gt;
  public $ISBN_URL;&lt;br /&gt;
  public $HtmlName;&lt;br /&gt;
// status fields&lt;br /&gt;
  public $Status;&lt;br /&gt;
  public $isFound;&lt;br /&gt;
//  public static $lstTitles;&lt;br /&gt;
&lt;br /&gt;
  public function ID() {&lt;br /&gt;
    if (!isset($this-&amp;gt;intID)) {&lt;br /&gt;
      $this-&amp;gt;UpdateName();&lt;br /&gt;
    }&lt;br /&gt;
//echo &amp;#039;TITLE ID=&amp;#039;.$this-&amp;gt;intID;&lt;br /&gt;
    return $this-&amp;gt;intID;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function ImportLine($iLine) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    list($ImportKeyRaw,$notUsed,$this-&amp;gt;Name,$notUsed,$strSupplierName,$notUsed,$this-&amp;gt;Price) = explode(&amp;quot;\t&amp;quot;,$iLine);&lt;br /&gt;
//echo &amp;#039;NAME=&amp;#039;.$Name.&amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
// Check to see if the title is actually a category record - price is 0, name is empty or contains &amp;quot;classification&amp;quot;&lt;br /&gt;
    $this-&amp;gt;isCatg = false;&lt;br /&gt;
    if ($this-&amp;gt;Price == 0.0) {&lt;br /&gt;
      if ((!MakeKey($this-&amp;gt;Name)) || (eregi(&amp;#039;classification&amp;#039;,$this-&amp;gt;Name))) {&lt;br /&gt;
        $this-&amp;gt;isCatg = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ($this-&amp;gt;isCatg) {&lt;br /&gt;
// for now, we&amp;#039;re not really doing anything with category lines&lt;br /&gt;
      $this-&amp;gt;HtmlName = &amp;#039;&amp;lt;span style=&amp;quot;background-color: #eeeeff;&amp;quot;&amp;gt;&amp;lt;i&amp;gt;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
// ** Supplier&lt;br /&gt;
      if ($strSupplierName == &amp;#039;&amp;#039;) {&lt;br /&gt;
        $strSupplierName = CUSTOM_DEFAULT_SUPPLIER;&lt;br /&gt;
      }&lt;br /&gt;
      $this-&amp;gt;SuppImp = clsSuppliers::Import($strSupplierName);&lt;br /&gt;
      $this-&amp;gt;Supplier = $this-&amp;gt;SuppImp-&amp;gt;Supplier;&lt;br /&gt;
&lt;br /&gt;
// Parse out the category and title key&lt;br /&gt;
      $listTitleParts = array_reverse(split(&amp;#039;:&amp;#039;,$ImportKeyRaw));&lt;br /&gt;
      $this-&amp;gt;ImportKey = MakeKey(array_shift($listTitleParts));&lt;br /&gt;
      $strCatg = array_shift($listTitleParts);   // for now, assume just one level of category&lt;br /&gt;
      if (!$strCatg) {&lt;br /&gt;
        $strCatg = CUSTOM_DEFAULT_CATEGORY;&lt;br /&gt;
      }&lt;br /&gt;
      $this-&amp;gt;CatgImp = clsCategoryImports::Import($strCatg);&lt;br /&gt;
      $this-&amp;gt;Category = $this-&amp;gt;CatgImp-&amp;gt;Category;&lt;br /&gt;
//echo &amp;#039;CATG=&amp;#039;.$strCatg.&amp;#039; stored=&amp;#039;.$this-&amp;gt;Category-&amp;gt;Name.&amp;#039;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
      $this-&amp;gt;UpdateName();&lt;br /&gt;
&lt;br /&gt;
// ** Title: cross-reference import key to title ID&lt;br /&gt;
      $sqlFind = &amp;#039;SELECT * FROM &amp;#039;.TABLE_CUSTOM_IMPORT_PROD.&amp;#039; WHERE import_key=&amp;quot;&amp;#039;.$this-&amp;gt;ImportKey.&amp;#039;&amp;quot;;&amp;#039;;&lt;br /&gt;
      $qryTitle = $db-&amp;gt;Execute($sqlFind);&lt;br /&gt;
      if ($qryTitle-&amp;gt;RecordCount()) {&lt;br /&gt;
        $this-&amp;gt;isFound = true;&lt;br /&gt;
        $this-&amp;gt;Status = HTML_STATUS_EXISTS;&lt;br /&gt;
        $this-&amp;gt;ID = $qryTitle-&amp;gt;fields[&amp;#039;prod_key&amp;#039;];&lt;br /&gt;
      } else {&lt;br /&gt;
        $this-&amp;gt;isFound = false;&lt;br /&gt;
	if ($lstTitles[$this-&amp;gt;ImportKey]) {&lt;br /&gt;
	  $this-&amp;gt;Status = HTML_STATUS_NOTED;&lt;br /&gt;
        } else {&lt;br /&gt;
          $this-&amp;gt;Status = HTML_STATUS_NEW;&lt;br /&gt;
//          $lstTitles[$this-&amp;gt;ImportKey] = $this-&amp;gt;ID;  // may eventually want to save an object, not just a string&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function UpdateName() {&lt;br /&gt;
    $subject = $this-&amp;gt;Name;&lt;br /&gt;
    $pattern = &amp;#039;/ISBN *[0-9\-]*/&amp;#039;;&lt;br /&gt;
    preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);&lt;br /&gt;
// This operation is unnecessarily complicated, but it is what seems to work:&lt;br /&gt;
    $this-&amp;gt;ISBN = trim(preg_replace(&amp;#039;/ISBN/&amp;#039;,&amp;#039;&amp;#039;,$matches[0][0]));&lt;br /&gt;
    if ($this-&amp;gt;ISBN) {&lt;br /&gt;
      $this-&amp;gt;ISBN_URL = preg_replace(&amp;#039;/&amp;lt;&amp;lt;1&amp;gt;&amp;gt;/&amp;#039;,$this-&amp;gt;ISBN,URL_ISBN_SEARCH);&lt;br /&gt;
      $this-&amp;gt;HtmlName = &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.$this-&amp;gt;ISBN_URL.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;HtmlName = $this-&amp;gt;Name;&lt;br /&gt;
      $this-&amp;gt;ISBN_URL = &amp;#039;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function Save($iCommit) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    if ($this-&amp;gt;isFound) {&lt;br /&gt;
// TO DO: write update routine&lt;br /&gt;
    } else {&lt;br /&gt;
// Check for missing manufacturer:&lt;br /&gt;
     if (!$this-&amp;gt;Supplier-&amp;gt;ID()) {&lt;br /&gt;
       echo &amp;#039;&amp;lt;b&amp;gt;MISSING SUPPLIER&amp;lt;/b&amp;gt; for title &amp;quot;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;quot;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
     }&lt;br /&gt;
     if (!$this-&amp;gt;Category-&amp;gt;ID()) {&lt;br /&gt;
       echo &amp;#039;&amp;lt;b&amp;gt;MISSING CATEGORY&amp;lt;/b&amp;gt; for title &amp;quot;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;quot;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
// only insert items with a numerically valid price&lt;br /&gt;
      if (is_numeric(trim($this-&amp;gt;Price))) {&lt;br /&gt;
// Theory: MySQL defaults to using the first index as an auto-increment key. We&amp;#039;ll see if this works.&lt;br /&gt;
// Update main PRODUCTS table:&lt;br /&gt;
        $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_PRODUCTS.&amp;#039; (products_status,products_price,products_date_added,manufacturers_id,master_categories_id)&amp;#039;&lt;br /&gt;
	.&amp;#039;VALUES(&amp;#039;&lt;br /&gt;
	.&amp;#039;1,&amp;#039;				// products_status (1 = active)&lt;br /&gt;
	.$this-&amp;gt;Price.&amp;#039;,&amp;#039;		// products_price&lt;br /&gt;
	.&amp;#039;NOW(),&amp;#039;			// products_date_added&lt;br /&gt;
	.$this-&amp;gt;Supplier-&amp;gt;ID().&amp;#039;,&amp;#039;	// manufacturers_id&lt;br /&gt;
	.$this-&amp;gt;Category-&amp;gt;ID().&amp;#039;)&amp;#039;;	// master_categories_id&lt;br /&gt;
        $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
        if ($iCommit) {&lt;br /&gt;
          $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
          $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;main products table status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
          $this-&amp;gt;intID = mysql_insert_id();&lt;br /&gt;
          $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;ID&amp;lt;/b&amp;gt;: &amp;#039;.$this-&amp;gt;intID;&lt;br /&gt;
        } else {&lt;br /&gt;
          $this-&amp;gt;intID = 0;&lt;br /&gt;
        }&lt;br /&gt;
// Update product import table:&lt;br /&gt;
        $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_CUSTOM_IMPORT_PROD.&amp;#039; (import_key,prod_key) VALUES(&amp;quot;&amp;#039;.mysql_real_escape_string($this-&amp;gt;ImportKey).&amp;#039;&amp;quot;,&amp;#039;.$this-&amp;gt;ID().&amp;#039;)&amp;#039;;&lt;br /&gt;
        $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
        if ($iCommit) {&lt;br /&gt;
          $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
          $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;products import table status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
// Update PRODUCTS_DESCRIPTION:&lt;br /&gt;
        $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_PRODUCTS_DESCRIPTION.&amp;#039; (products_id,products_name) VALUES(&amp;#039;.$this-&amp;gt;ID().&amp;#039;,&amp;quot;&amp;#039;.mysql_real_escape_string($this-&amp;gt;Name).&amp;#039;&amp;quot;)&amp;#039;;&lt;br /&gt;
        $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
        if ($iCommit) {&lt;br /&gt;
          $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
          $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;products description status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
        }&lt;br /&gt;
// Update PRODUCT CATEGORIES:&lt;br /&gt;
        $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_PRODUCTS_TO_CATEGORIES.&amp;#039; (products_id,categories_id) VALUES(&amp;#039;.$this-&amp;gt;ID().&amp;#039;,&amp;#039;.$this-&amp;gt;Category-&amp;gt;ID().&amp;#039;)&amp;#039;;&lt;br /&gt;
        $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
        if ($iCommit) {&lt;br /&gt;
          $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
          $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;products description status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        $result = &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;: product [&amp;#039;.$this-&amp;gt;Name.&amp;#039;] has no price set (&amp;#039;.$this-&amp;gt;Price.&amp;#039;); skipping.&amp;#039;;&lt;br /&gt;
      }&lt;br /&gt;
      return $result;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public function TableRowCells() {&lt;br /&gt;
    $out = &amp;#039;&amp;lt;td&amp;gt;&amp;#039;.$this-&amp;gt;Category-&amp;gt;Name.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#039;.$this-&amp;gt;ImportKey.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#039;.$this-&amp;gt;HtmlName.&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
    if ($this-&amp;gt;isCatg) {&lt;br /&gt;
      $out .= &amp;#039;&amp;lt;td colspan=5 align=center bgcolor=&amp;quot;#eeeeff&amp;quot;&amp;gt;&amp;lt;b&amp;gt;category&amp;lt;/b&amp;gt; (ignored)&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      $out .= &amp;#039;&amp;lt;td&amp;gt;(&amp;lt;b&amp;gt;&amp;#039;.$this-&amp;gt;Supplier-&amp;gt;ID().&amp;#039;&amp;lt;/b&amp;gt;) &amp;#039;.$this-&amp;gt;Supplier-&amp;gt;Name.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#039;.$this-&amp;gt;Price.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt;&amp;#039;.$this-&amp;gt;SuppImp-&amp;gt;Status.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt;&amp;#039;.$this-&amp;gt;Status.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#039;.$this-&amp;gt;CatgImp-&amp;gt;Status.&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return $out;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsSuppliers {&lt;br /&gt;
  private static $Records;&lt;br /&gt;
&lt;br /&gt;
  public function Import($iName) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    $objSuppImp = new clsSupplierImport;&lt;br /&gt;
    if (self::$Records-&amp;gt;List[$iName]) {&lt;br /&gt;
// supplier has already been seen this session&lt;br /&gt;
      $objSupp = self::$Records-&amp;gt;List[$iName];  // retrieve existing supplier record&lt;br /&gt;
      $objSuppImp-&amp;gt;ImportOld($objSupp);  // attach it to supplier import record for this import&lt;br /&gt;
    } else {&lt;br /&gt;
// new supplier for this session&lt;br /&gt;
      $objSuppImp-&amp;gt;ImportNew($iName);&lt;br /&gt;
      self::$Records-&amp;gt;AddObject($iName,$objSuppImp-&amp;gt;Supplier);&lt;br /&gt;
//      self::$Records-&amp;gt;List[$iName] = $objSuppImp-&amp;gt;Supplier;&lt;br /&gt;
 //     if (!$objSuppImp-&amp;gt;Supplier-&amp;gt;isFound) {&lt;br /&gt;
  //     $this-&amp;gt;Records-&amp;gt;qtyNew++;&lt;br /&gt;
    //  }&lt;br /&gt;
    }&lt;br /&gt;
    return $objSuppImp;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
// save list of (new) suppliers to database&lt;br /&gt;
  public function Save($iCommit) {&lt;br /&gt;
    global $db;&lt;br /&gt;
    $result = &amp;#039;&amp;lt;ul&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    foreach (self::$Records-&amp;gt;List as $obj) {&lt;br /&gt;
      if (!$obj-&amp;gt;isFound) {&lt;br /&gt;
        if ($strValues) {&lt;br /&gt;
          $strValues .= &amp;#039;,&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
        $strValues .= &amp;#039;(&amp;quot;&amp;#039;.mysql_real_escape_string($obj-&amp;gt;Name).&amp;#039;&amp;quot;,NOW())&amp;#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($strValues) {&lt;br /&gt;
      $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_MANUFACTURERS.&amp;#039; (manufacturers_name, date_added) VALUES&amp;#039;.$strValues;&lt;br /&gt;
      $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
      if ($iCommit) {&lt;br /&gt;
        $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
        $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    $result .= &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
    return $result;&lt;br /&gt;
  }&lt;br /&gt;
  public function Count() {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;Count();&lt;br /&gt;
  }&lt;br /&gt;
  public function CountNew() {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;CountNew();&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListNew($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;DoListNew($iPfx,$iSfx,$iSep);&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListOld($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;DoListOld($iPfx,$iSfx,$iSep);&lt;br /&gt;
  }&lt;br /&gt;
  protected function InitRecords() {&lt;br /&gt;
    if (!isset(self::$Records)) {&lt;br /&gt;
      self::$Records = new clsRecords;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsSupplier {&lt;br /&gt;
  private $intID;&lt;br /&gt;
  public $Name;&lt;br /&gt;
  public $Key;&lt;br /&gt;
  public $isFound;&lt;br /&gt;
&lt;br /&gt;
  public function Init($iName) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;Name = $iName;&lt;br /&gt;
    $this-&amp;gt;UpdateName();&lt;br /&gt;
  }&lt;br /&gt;
  public function Init_fromID($iID) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;intID = $iID;&lt;br /&gt;
    $sqlFind = &amp;#039;SELECT * FROM &amp;#039;.TABLE_MANUFACTURERS.&amp;#039; WHERE manufacturers_id=&amp;quot;&amp;#039;.$iID.&amp;#039;&amp;quot;;&amp;#039;;&lt;br /&gt;
    $qryFind = $db-&amp;gt;Execute($sqlFind);&lt;br /&gt;
    $this-&amp;gt;isFound = $qryFind-&amp;gt;RecordCount();&lt;br /&gt;
    if ($this-&amp;gt;isFound) {&lt;br /&gt;
      $this-&amp;gt;Name = $qryFind-&amp;gt;fields[&amp;#039;manufacturers_name&amp;#039;];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private function UpdateName() {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $sqlFind = &amp;#039;SELECT * FROM &amp;#039;.TABLE_MANUFACTURERS.&amp;#039; WHERE manufacturers_name=&amp;quot;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;quot;;&amp;#039;;&lt;br /&gt;
    $qryFind = $db-&amp;gt;Execute($sqlFind);&lt;br /&gt;
    $this-&amp;gt;isFound = $qryFind-&amp;gt;RecordCount();&lt;br /&gt;
    if ($this-&amp;gt;isFound) {&lt;br /&gt;
      $this-&amp;gt;intID = $qryFind-&amp;gt;fields[&amp;#039;manufacturers_id&amp;#039;];&lt;br /&gt;
    } else {&lt;br /&gt;
// not found in main list, so check aliases&lt;br /&gt;
      $sqlFind = &amp;#039;SELECT * FROM &amp;#039;.TABLE_CUSTOM_IMPORT_MFGRS.&amp;#039; WHERE LCASE(import_alias)=&amp;quot;&amp;#039;.mysql_real_escape_string(strtolower($this-&amp;gt;Name)).&amp;#039;&amp;quot;;&amp;#039;;&lt;br /&gt;
      $qryFind = $db-&amp;gt;Execute($sqlFind);&lt;br /&gt;
      $this-&amp;gt;isFound = $qryFind-&amp;gt;RecordCount();&lt;br /&gt;
      if ($this-&amp;gt;isFound) {&lt;br /&gt;
        $this-&amp;gt;Init_fromID($qryFind-&amp;gt;fields[&amp;#039;id_mfgr&amp;#039;]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public function ID() {&lt;br /&gt;
    if ($this-&amp;gt;intID) {&lt;br /&gt;
      $this-&amp;gt;UpdateName();&lt;br /&gt;
    }&lt;br /&gt;
    return $this-&amp;gt;intID;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsSupplierImport {&lt;br /&gt;
  public $Supplier;	// points to supplier data&lt;br /&gt;
  public $Status;	// indicates status of this particular import of that data&lt;br /&gt;
&lt;br /&gt;
// Supplier record has already been created, so use it:&lt;br /&gt;
  public function ImportOld($iObj) {&lt;br /&gt;
    $this-&amp;gt;Supplier = $iObj;&lt;br /&gt;
    $this-&amp;gt;Status = HTML_STATUS_NOTED;&lt;br /&gt;
  }&lt;br /&gt;
// Supplier record needs to be created:&lt;br /&gt;
  public function ImportNew($iName) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;Supplier = new clsSupplier;&lt;br /&gt;
    $this-&amp;gt;Supplier-&amp;gt;Init($iName);&lt;br /&gt;
    if ($this-&amp;gt;Supplier-&amp;gt;isFound) {&lt;br /&gt;
      $this-&amp;gt;Status = HTML_STATUS_EXISTS;&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;Status = HTML_STATUS_NEW;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ===== CATEGORIES =====&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
class clsCategories {&lt;br /&gt;
  private static $Records;&lt;br /&gt;
&lt;br /&gt;
  public function Create($iName) {&lt;br /&gt;
// This function is only called if category has not been seen before in this run&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $objNew = new clsCategory;&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    &lt;br /&gt;
    $objNew-&amp;gt;Init($iName);&lt;br /&gt;
    self::$Records-&amp;gt;AddObject($iName,$objNew);&lt;br /&gt;
/*    self::$Records-&amp;gt;List[$iName] = $objNew;&lt;br /&gt;
    if (!$objNew-&amp;gt;isFound) {&lt;br /&gt;
      self::$Records-&amp;gt;qtyNew++;&lt;br /&gt;
    }&lt;br /&gt;
*/&lt;br /&gt;
    return $objNew;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
// add any new categories to database&lt;br /&gt;
  public function Save($iCommit) {&lt;br /&gt;
    foreach (self::$Records-&amp;gt;List as $obj) {&lt;br /&gt;
      if (!$obj-&amp;gt;isFound) {&lt;br /&gt;
        $sqlOut .= $obj-&amp;gt;Save($iCommit);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return $sqlOut;&lt;br /&gt;
  }&lt;br /&gt;
  public function GetObject($ID) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;List[$ID];&lt;br /&gt;
  }&lt;br /&gt;
  public function Count() {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;Count();&lt;br /&gt;
  }&lt;br /&gt;
  public function CountNew() {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;CountNew();&lt;br /&gt;
  }&lt;br /&gt;
  public function Exists($iName) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;Exists($iName);&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListNew($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;DoListNew($iPfx,$iSfx,$iSep);&lt;br /&gt;
  }&lt;br /&gt;
  public function DoListOld($iPfx,$iSfx,$iSep) {&lt;br /&gt;
    self::InitRecords();&lt;br /&gt;
    return self::$Records-&amp;gt;DoListOld($iPfx,$iSfx,$iSep);&lt;br /&gt;
  }&lt;br /&gt;
  protected function InitRecords() {&lt;br /&gt;
    if (!isset(self::$Records)) {&lt;br /&gt;
      self::$Records = new clsRecords;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class clsCategory {&lt;br /&gt;
  private $intID;&lt;br /&gt;
  public $Name;&lt;br /&gt;
  public $ImportKey;&lt;br /&gt;
// status&lt;br /&gt;
  public $isFound;&lt;br /&gt;
&lt;br /&gt;
  public function Init($iName) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
//echo &amp;#039;storing 2:&amp;#039;.$iName.&amp;#039; &amp;#039;;&lt;br /&gt;
    $this-&amp;gt;Name = $iName;&lt;br /&gt;
    $this-&amp;gt;ImportKey = MakeKey($iName);&lt;br /&gt;
    $this-&amp;gt;UpdateName();&lt;br /&gt;
  }&lt;br /&gt;
  private function UpdateName() {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $sqlFind = &amp;#039;SELECT * FROM &amp;#039;.TABLE_CATEGORIES_DESCRIPTION.&amp;#039; WHERE categories_name=&amp;quot;&amp;#039;.$this-&amp;gt;Name.&amp;#039;&amp;quot;&amp;#039;;&lt;br /&gt;
    $qryFind = $db-&amp;gt;Execute($sqlFind);&lt;br /&gt;
    $this-&amp;gt;isFound = $qryFind-&amp;gt;RecordCount();&lt;br /&gt;
    $this-&amp;gt;intID = $qryFind-&amp;gt;fields[&amp;#039;categories_id&amp;#039;];&lt;br /&gt;
  }&lt;br /&gt;
  public function ID() {&lt;br /&gt;
    if (!$this-&amp;gt;intID) {&lt;br /&gt;
      $this-&amp;gt;UpdateName();&lt;br /&gt;
    }&lt;br /&gt;
    return $this-&amp;gt;intID;&lt;br /&gt;
  }&lt;br /&gt;
  public function Save($iCommit) {&lt;br /&gt;
    global $db;&lt;br /&gt;
&lt;br /&gt;
    $result = &amp;#039;&amp;lt;ul&amp;gt;&amp;#039;;&lt;br /&gt;
    $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_CATEGORIES.&amp;#039; (date_added) VALUES(NOW())&amp;#039;;&lt;br /&gt;
    $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
    if ($iCommit) {&lt;br /&gt;
      $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
      $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
      $idNew = mysql_insert_id();&lt;br /&gt;
      $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;ID&amp;lt;/b&amp;gt;: &amp;#039;.$idNew;&lt;br /&gt;
    } else {&lt;br /&gt;
      $idNew = &amp;#039;?&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    $sqlAdd = &amp;#039;INSERT INTO &amp;#039;.TABLE_CATEGORIES_DESCRIPTION.&amp;#039; (categories_id,categories_name) VALUES(&amp;#039;&lt;br /&gt;
      .$idNew.&amp;#039;,&amp;quot;&amp;#039;.mysql_real_escape_string($this-&amp;gt;Name).&amp;#039;&amp;quot;);&amp;#039;;&lt;br /&gt;
    $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SQL&amp;lt;/b&amp;gt;: &amp;#039;.$sqlAdd;&lt;br /&gt;
    if ($iCommit) {&lt;br /&gt;
      $db-&amp;gt;Execute($sqlAdd);&lt;br /&gt;
      $result .= &amp;#039;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;status&amp;lt;/b&amp;gt;: &amp;#039;.mysql_info();&lt;br /&gt;
    }&lt;br /&gt;
    $result .= &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
    return $result;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsCategoryImports {&lt;br /&gt;
  public function Import($iName) {&lt;br /&gt;
    $objImport = new clsCategoryImport;&lt;br /&gt;
    $objImport-&amp;gt;Import($iName);&lt;br /&gt;
    return $objImport;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class clsCategoryImport {&lt;br /&gt;
  public $Category;&lt;br /&gt;
  public $Status;&lt;br /&gt;
&lt;br /&gt;
  public function Import($iName) {&lt;br /&gt;
//    echo &amp;#039;storing 1:&amp;#039;.$iName.&amp;#039; &amp;#039;;&lt;br /&gt;
    if (clsCategories::Exists($iName)) {&lt;br /&gt;
//echo &amp;#039;EXISTS &amp;#039;;&lt;br /&gt;
      $this-&amp;gt;Category = clsCategories::GetObject($iName);&lt;br /&gt;
      $this-&amp;gt;Status = HTML_STATUS_NOTED;&lt;br /&gt;
    } else {&lt;br /&gt;
//echo &amp;#039;*NEW* &amp;#039;;&lt;br /&gt;
      $this-&amp;gt;Category = clsCategories::Create($iName);&lt;br /&gt;
      if ($this-&amp;gt;Category-&amp;gt;isFound) {&lt;br /&gt;
        $this-&amp;gt;Status = HTML_STATUS_EXISTS;&lt;br /&gt;
      } else {&lt;br /&gt;
        $this-&amp;gt;Status = HTML_STATUS_NEW;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>