<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Zen Cart Documentation – Architecture</title>
    <link>https://docs.zen-cart.com/dev/architecture/</link>
    <description>Recent content in Architecture on Zen Cart Documentation</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://docs.zen-cart.com/dev/architecture/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Dev: Auto Inclusion System</title>
      <link>https://docs.zen-cart.com/dev/architecture/inclusion/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/inclusion/</guid>
      <description>
        
        
        &lt;p&gt;To reduce the number of changes required for plugin authors, Zen Cart does some automatic inclusion of files.&lt;/p&gt;
&lt;h3 id=&#34;functions&#34;&gt;Functions&lt;/h3&gt;
&lt;p&gt;Any &lt;code&gt;*.php&lt;/code&gt; files placed in &lt;code&gt;includes/functions/extra_functions&lt;/code&gt; are loaded automatically, and can be called by any storefront side logic.  Similarly, on the admin side, functions in &lt;code&gt;admin/includes/functions/extra_functions&lt;/code&gt; are automatically loaded.&lt;/p&gt;
&lt;h3 id=&#34;language-files&#34;&gt;Language Files&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A storefront side page will automatically load its own language file.  So the page &lt;code&gt;includes/modules/pages/contact_us/&lt;/code&gt; will load &lt;code&gt;includes/languages/english/contact_us.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;All files in &lt;code&gt;includes/languages/english/extra_definitions&lt;/code&gt; are automatically loaded.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;extra-datafiles-extra-configures-extra-cart-actions&#34;&gt;Extra Datafiles, Extra Configures, Extra Cart Actions&lt;/h3&gt;
&lt;p&gt;Any &lt;code&gt;*.php&lt;/code&gt; files in this folder are loaded automatically.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/extra_folders/&#34;&gt;Extra folders&lt;/a&gt; for a complete list.&lt;/p&gt;
&lt;h3 id=&#34;auto-loaded-observers&#34;&gt;Auto Loaded Observers&lt;/h3&gt;
&lt;p&gt;These are described in the &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers/#auto-loaded-observers&#34;&gt;Notifiers and Observers&lt;/a&gt; documentation. Auto-loaded Observer files include those in &lt;code&gt;includes/classes/observers&lt;/code&gt; (and Admin) whose name begins with &lt;code&gt;auto.&lt;/code&gt; and which define a class named &lt;strong&gt;zcObserver&lt;/strong&gt; + the &lt;a href=&#34;http://en.wikipedia.org/wiki/CamelCase&#34;&gt;CamelCased&lt;/a&gt; filename - for example, &lt;code&gt;class zcObserverFooObserver&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;stylesheets&#34;&gt;Stylesheets&lt;/h3&gt;
&lt;p&gt;A number of stylesheets are automatically loaded; this process is described in the &lt;a href=&#34;https://docs.zen-cart.com/user/template/stylesheet/&#34;&gt;stylesheet documentation&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Constants in Zen Cart</title>
      <link>https://docs.zen-cart.com/dev/architecture/constants/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/constants/</guid>
      <description>
        
        
        &lt;p&gt;Zen Cart has a group of defined constants (created with the PHP &lt;code&gt;define&lt;/code&gt; statement) that arise from values in the database, primarily in the &lt;code&gt;configuration&lt;/code&gt; table.&lt;/p&gt;
&lt;p&gt;The Configuration constants may be seen in the &lt;a href=&#34;https://docs.zen-cart.com/user/admin_pages/configuration/all/&#34;&gt;All Configuration Values&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;The majority of the constants in the configuration tables are created as define strings, based on the &lt;code&gt;configuration_key&lt;/code&gt; for the row.  So if you look at Admin &amp;gt; Configuration &amp;gt; My Store &amp;gt; Store Name, you can see the &lt;code&gt;configuration_key&lt;/code&gt; is  &lt;code&gt;STORE_NAME&lt;/code&gt;.  This means the defined constant is a string called &lt;code&gt;STORE_NAME&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The exceptions to the rule of creating string constants are the values in configuration groups 2 and 3, which are the &lt;a href=&#34;https://docs.zen-cart.com/user/admin_pages/configuration/configuration_minimumvalues/&#34;&gt;Minimum Values&lt;/a&gt;  and &lt;a href=&#34;https://docs.zen-cart.com/user/admin_pages/configuration/configuration_maximumvalues/&#34;&gt;Maximum Values&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Min and Max values can be easily recognized as integer values because almost all of them contain the string &lt;code&gt;MIN&lt;/code&gt; or &lt;code&gt;MAX&lt;/code&gt; respectively in their name.  The only exception is &lt;code&gt;SHOW_NEW_PRODUCTS_LIMIT&lt;/code&gt; (a Max value).&lt;/p&gt;
&lt;p&gt;There are a small number of exceptions to the two rules noted above, which are:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Config Group&lt;/th&gt;
&lt;th&gt;Screen&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SECURITY_CODE_LENGTH&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Admin &amp;gt; Configuration &amp;gt; GV Coupons&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PRODUCTS_MANUFACTURERS_STATUS&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Admin &amp;gt; Configuration &amp;gt; Maximum Values&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHOW_SALE_DISCOUNT_DECIMALS&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Admin &amp;gt; Configuration &amp;gt; Product Info&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note that the Max and Min values are converted to Integers at constant creation time in newer versions of Zen Cart in &lt;code&gt;laravel/app/Models/Configuration.php&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Creating an Observer Class (HOW-TO example)</title>
      <link>https://docs.zen-cart.com/dev/architecture/observer-creation-example/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/observer-creation-example/</guid>
      <description>
        
        
        &lt;h1 id=&#34;lets-discover-how-to-create-an-observer-class-step-by-step&#34;&gt;Let&amp;rsquo;s Discover How To Create An Observer Class, Step By Step&lt;/h1&gt;
&lt;h2 id=&#34;task&#34;&gt;Task:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Storeowner wants to send the customer an email with a unique code when the customer creates an account.&lt;/li&gt;
&lt;li&gt;The code pattern is &amp;ldquo;ABC00001&amp;rdquo;, where ABC is fixed text, and 00001 is the customer number, with leading zeros up to exactly 5 digits.&lt;/li&gt;
&lt;li&gt;There is no need to build a database of already-issued codes, since the customer ID number is already unique per customer.&lt;/li&gt;
&lt;li&gt;(This example was built based on v1.5.0 code, so adheres to some early basic implementation approaches.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-thinking-and-coding-process&#34;&gt;The thinking and coding process&lt;/h2&gt;
&lt;p&gt;First, since this must happen during account-creation, it makes sense to consider looking at the &lt;code&gt;/includes/modules/create_account.php&lt;/code&gt; script which handles those activities.&lt;/p&gt;
&lt;p&gt;Since the intention is to see whether an Observer class can be used for this, I started by scanning the file for any notifier hooks.
These can be identified in either of two ways: calls to &lt;code&gt;$zco_notifier-&amp;gt;notify()&lt;/code&gt; for procedural code or &lt;code&gt;$this-&amp;gt;notify()&lt;/code&gt; from inside any class method.&lt;/p&gt;
&lt;p&gt;We want a notifier point that fires sometime after a customer has submitted their user information and it&amp;rsquo;s been validated.&lt;/p&gt;
&lt;p&gt;So, at the end of the validation code there&amp;rsquo;s this one:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;notify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_FAILURE_DURING_CREATE_ACCOUNT&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; but we&amp;rsquo;re not interested in a &amp;ldquo;failure&amp;rdquo; case, so we keep looking:&lt;/p&gt;
&lt;p&gt;The next one is this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;notify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;array_merge&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customer_id&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$_SESSION&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customer_id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]),&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$sql_data_array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And, looking closely at the code immediately above it, we see that that part of the code has just finished building the new customer data for the database,
inserted that record, and set the &lt;code&gt;customer ID&lt;/code&gt; into the session, effectively logging them in. This is perfect!
And what&amp;rsquo;s even better is that the &lt;code&gt;$sql_data_array&lt;/code&gt; has also been passed, so we can make use of that to customize the email with the customer&amp;rsquo;s name and email address.&lt;/p&gt;
&lt;p&gt;So, now we start with creating an observer class. We start with the basic structure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; * Observer class for sending an extra email during customer-creation/welcome process
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;send_extra_email_at_welcome&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;update&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$class&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$eventID&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You&amp;rsquo;ll see here that we&amp;rsquo;ve given the class a name of &lt;code&gt;send_extra_email_at_welcome&lt;/code&gt;.
This name will be used later in the auto_loader to activate this observer class. The name itself just needs to be unique from any other class used in the store.&lt;/p&gt;
&lt;p&gt;Next we need to set up the constructor to watch the &lt;code&gt;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&lt;/code&gt; hook we identified earlier.
Since the notifier hook is activated via a public/global &lt;code&gt;$zco_notifier&lt;/code&gt; call, we set the observer up to attach to that &lt;code&gt;$zco_notifier-&amp;gt;notify()&lt;/code&gt; call:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;global&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;attach&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We have a few main tasks to perform when this notifier hook is called:
a) create a formatted &amp;ldquo;code&amp;rdquo; based on the customer number
b) assemble email text with the code
c) send the email&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at these one at a time:&lt;/p&gt;
&lt;p&gt;a) create the formatted code from the customer number. We&amp;rsquo;ll use the PHP function str_pad() to add enough zeros to make a 5-digit value from the customer number:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     * Here we take the customer number, and add enough zeros to the left of it to make it be 5 digits long.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;str_pad&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$_SESSION&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customer_id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;STR_PAD_LEFT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and then add the ABC prefix to the beginning of it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     * Then the &amp;#39;ABC&amp;#39; prefix is added to it:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;ABC&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;b) Put together some email text, using the code. The first line here is the plain-text content. The $html_msg array will contain the same content, but formatted as HTML, in case the customer has opted to receive html-formatted messages in their preferences during signup.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Here is your unique code: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_MESSAGE_HTML&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;nl2br&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We&amp;rsquo;ll need a subject line for the email:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Your unique customer code!&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_SUBJECT&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;c) To send the email, we need to get the customer&amp;rsquo;s email address. The call to $zco_notifier-&amp;gt;notify() included some extra parameters, which show up in this observer class via the $paramsArray variable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$customer_email_address&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_email_address&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Similarly, in this case we happen to also have access to the customer&amp;rsquo;s firstname/lastname, based on whatever they supplied during signup. Here we concatenate both values into a single string:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$customer_name&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_firstname&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_lastname&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And now we send the email, using all the data we&amp;rsquo;ve prepared:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;zen_mail&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$customer_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$customer_email_address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;STORE_NAME&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;EMAIL_FROM&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;finished-code&#34;&gt;Finished Code&lt;/h3&gt;
&lt;p&gt;When we put it all together, the finished code looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; * Observer class for sending an extra email during customer-creation/welcome process
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;send_extra_email_at_welcome&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;global&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;attach&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;update&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$class&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$eventID&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     * Here we take the customer number, and add enough zeros to the left of it to make it be 5 digits long.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;str_pad&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$_SESSION&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customer_id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;STR_PAD_LEFT&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     * Then the &amp;#39;ABC&amp;#39; prefix is added to it:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;ABC&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     * Now build and send the email to the customer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Here is your unique code: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_MESSAGE_HTML&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;nl2br&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Your unique customer code!&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_SUBJECT&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$customer_name&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_firstname&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_lastname&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$customer_email_address&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;customers_email_address&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;zen_mail&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$customer_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$customer_email_address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;STORE_NAME&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;EMAIL_FROM&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$html_msg&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We&amp;rsquo;ll store this code into a new file, named &lt;code&gt;/includes/classes/observers/class.send_extra_email_at_welcome.php&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;enabling-the-observer&#34;&gt;Enabling The Observer&lt;/h3&gt;
&lt;p&gt;Finally, to turn the whole thing on, we add the auto_loader code to tell Zen Cart to load the observer class and instantiate it.
The file will be uploaded to: &lt;code&gt;/includes/auto_loaders/config.send_extra_email_at_welcome.php&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$autoLoadConfig&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;190&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;][]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;autoType&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;loadFile&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;observers/class.send_extra_email_at_welcome.php&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$autoLoadConfig&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;190&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;][]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;autoType&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;classInstantiate&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;className&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;send_extra_email_at_welcome&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;objectName&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;send_extra_email_at_welcome&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The value of &lt;code&gt;190&lt;/code&gt; is used to essentially process all of this at the end of the normal autoloader stack.
The load file points to the class file created earlier.
And the className matches the class name in the class file we made, and the objectName is basically the instantiation object built to fire the observer when appropriate &amp;hellip; it usually is just the same as the className.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it. With both of those files in place, when the customer creates a new account, they will receive an extra email (in addition to the normal Welcome email) in which they are told their unique customer code.&lt;/p&gt;
&lt;h3 id=&#34;other-considerations&#34;&gt;Other Considerations&lt;/h3&gt;
&lt;h4 id=&#34;what-about-making-it-multi-language-capable&#34;&gt;What about making it multi-language capable?&lt;/h4&gt;
&lt;p&gt;To do this, we must change the language text into defined constants.
So, we&amp;rsquo;ll take these two lines:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Here is your unique code: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Your unique customer code!&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and make language defines for them:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;define&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_SUBJECT_EXTRA_EMAIL_WELCOME&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Your unique customer code!&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;define&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EMAIL_TEXT_EXTRA_EMAIL_MESSAGE&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Here is your unique code: &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and change the code to use those constants in place of the text.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_text&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;EMAIL_TEXT_EXTRA_EMAIL_MESSAGE&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$code&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$email_subject&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;EMAIL_SUBJECT_EXTRA_EMAIL_WELCOME&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now those define statements can be placed into new files in corresponding language folders so they can be
translated to suit whatever language the customer has selected while visiting the site.
The define statements would go into a file at
&lt;code&gt;/includes/languages/NAME_OF_A_LANGUAGE_HERE/extra_definitions/send_extra_email_at_welcome.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(REALLY those language defines, and the file, should be constructed according to updates methods added since v1.5.8. See the Docs for language files, for details)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article inspired by a &lt;a href=&#34;https://www.zen-cart.com/showthread.php/199729-How-to-assign-unique-account-numbers-OR-usernames?p=1148601#post1148601&#34;&gt;community discussion&lt;/a&gt; for a more specific use-case.&lt;/em&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Extra Folders</title>
      <link>https://docs.zen-cart.com/dev/architecture/extra_folders/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/extra_folders/</guid>
      <description>
        
        
        &lt;p&gt;Files in these folders are autoloaded:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;includes/extra_datafiles/
includes/languages/english/extra_definitions/
includes/functions/extra_functions/
includes/extra_configures/
admin/includes/extra_datafiles/
admin/includes/languages/english/extra_definitions/
admin/includes/functions/extra_functions/
admin/includes/extra_configures/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that the folder &lt;code&gt;/extras&lt;/code&gt; at the root of Zen Cart is
a set of utilities, not autoloads.&lt;/p&gt;
&lt;p&gt;Autoloads are designed to make upgrades easier since using them means fewer core file edits.&lt;/p&gt;
&lt;p&gt;The usage of these folders is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;includes/extra_datafiles&lt;/code&gt;: definitions of table names and PHP files which have been added.  Using this folder means not having to update the core files &lt;code&gt;includes/database_tables.php&lt;/code&gt; and &lt;code&gt;includes/filenames.php&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;includes/languages/english/extra_definitions&lt;/code&gt;: language constants which have been added.  Using this folder means not having to update the core files &lt;code&gt;includes/languages/english.php&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;includes/functions/extra_functions&lt;/code&gt; - global functions which have been added.  Using this folder means not having to update &lt;code&gt;includes/init_includes/init_general_funcs.php&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;includes/extra_configures&lt;/code&gt; - global configuration settings which have been added.  Using this folder means not having to modify &lt;code&gt;includes/configure.php&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The admin folders use the same pattern.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Init System</title>
      <link>https://docs.zen-cart.com/dev/architecture/init_system/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/init_system/</guid>
      <description>
        
        
        &lt;p&gt;The initSystem refers to all of those files that are automatically included/initialised before any &lt;code&gt;command&lt;/code&gt; scripts can be run.&lt;/p&gt;
&lt;p&gt;Zen Cart v1.x.x and v2.x.x both use a (non Object Oriented) page controller pattern to decide the scripts to run, based on HTTP URL parameters. The most important of these is the &lt;code&gt;main_page&lt;/code&gt; parameter. Depending on that parameter, a command script is then run. Each commmand script resides in a directory in &lt;code&gt;/includes/modules/pages&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example if &lt;code&gt;main_page=login&lt;/code&gt; the command script would be taken from the &lt;code&gt;/includes/modules/pages/login/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;However the first thing every command script always does is &lt;code&gt;require()&lt;/code&gt; the &lt;code&gt;/includes/application_top.php&lt;/code&gt; file. This is the heart of the initSystem.&lt;/p&gt;
&lt;p&gt;It is &lt;code&gt;application_top.php&lt;/code&gt; that is responsible for initialising basic subsystems (database abstraction/sessions/languages etc.) and loading global configuration data.&lt;/p&gt;
&lt;p&gt;Zen Cart uses a control array to decide which functions/classes/data files are to be included and initialised. This allows contribution authors and third party developers to gain access to and extend the initSystem without compromising upgradeability.&lt;/p&gt;
&lt;p&gt;The following sections describe how the Zen Cart engine uses &lt;code&gt;application_top.php&lt;/code&gt; to bootstrap itself and initialise core systems.&lt;/p&gt;
&lt;h3 id=&#34;application_topphp---breakpoints&#34;&gt;application_top.php - Breakpoints&lt;/h3&gt;
&lt;p&gt;The focus of &lt;code&gt;application_top.php&lt;/code&gt; is primarily to set up some core requirements, and then process the auto_loader breakpoints as described below.&lt;/p&gt;
&lt;p&gt;Breakpoints can simply be described as points of importance.&lt;/p&gt;
&lt;p&gt;At each breakpoint something important happens: we may load a function or class, initialise a class, load a script fragment, and so on.
The important point is to recognise that at each breakpoint, third party code can, by adding to the control array, also load functions, load classes, initialise classes, run a class method or load (require) a script fragment.&lt;/p&gt;
&lt;h3 id=&#34;the-control-array&#34;&gt;The Control Array&lt;/h3&gt;
&lt;p&gt;Control arrays are automatically loaded from the directory &lt;code&gt;/includes/auto_loaders&lt;/code&gt;.
Every &lt;code&gt;*.php&lt;/code&gt; file within that directory is expected to have a certain structure.&lt;/p&gt;
&lt;p&gt;The master &lt;code&gt;config.core.php&lt;/code&gt; is the main file for governing &lt;code&gt;application_top.php&lt;/code&gt;, and should not be altered.&lt;/p&gt;
&lt;p&gt;Third party developers can add their own control array files.&lt;/p&gt;
&lt;p&gt;The structure of each file should look like this:&lt;/p&gt;
&lt;pre&gt; 
$autoLoadConfig[0] = array(); 
&lt;/pre&gt;
&lt;p&gt;The value after $autoLoadConfig (in this case &lt;code&gt;[0]&lt;/code&gt;) represents the order in which the actions happen (e.g. the Breakpoint), such that &lt;code&gt;$autoLoadConfig[0]&lt;/code&gt; will occur before &lt;code&gt;$autoLoadConfig[1]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note also that any two entries where the breakpoint is the same will occur in the order they appear within the file.&lt;/p&gt;
&lt;p&gt;The actual contents of the &lt;code&gt;array()&lt;/code&gt; part depends upon what effect is needed.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s consider a number of different scenarios.&lt;/p&gt;
&lt;h4 id=&#34;require&#34;&gt;require&lt;/h4&gt;
&lt;p&gt;First the case of just wanting to &lt;code&gt;require&lt;/code&gt; a file to be loaded. For this, the control array entry would be:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$autoLoadConfig[0][] = array(&amp;#39;autoType&amp;#39;=&amp;gt;&amp;#39;require&amp;#39;, &amp;#39;loadFile&amp;#39;=&amp;gt; DIR_WS_INCLUDES . &amp;#39;somefile.php&amp;#39;); 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;autotype&lt;/code&gt; parameter tells us that we just want to &lt;code&gt;require&lt;/code&gt; a file&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;loadFile&lt;/code&gt; parameter tells us which file we want to load.&lt;/p&gt;
&lt;p&gt;Loading &lt;code&gt;function&lt;/code&gt; files can also obviously be done using the above. (Alternatively they could just be placed in the &lt;code&gt;extra_functions&lt;/code&gt; directory.)&lt;/p&gt;
&lt;h4 id=&#34;include&#34;&gt;include&lt;/h4&gt;
&lt;p&gt;Similarly if we want to &lt;code&gt;include&lt;/code&gt; a file:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$autoLoadConfig[0][] = array(&amp;#39;autoType&amp;#39;=&amp;gt;&amp;#39;include&amp;#39;, &amp;#39;loadFile&amp;#39;=&amp;gt; DIR_WS_INCLUDES . &amp;#39;somefile.php&amp;#39;); 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;init-scripts&#34;&gt;init scripts&lt;/h4&gt;
&lt;p&gt;The initSystem introduces a special class of &lt;code&gt;.php&lt;/code&gt; files called &lt;strong&gt;init scripts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;These are stored in the &lt;code&gt;includes/init_includes&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Each of these contains a small amount of procedural code that can be run as part of the initSystem process.&lt;/p&gt;
&lt;p&gt;The reason for separating them out into a special directory is to allow for those init_scripts to be overridden, more of which will be discussed later.&lt;/p&gt;
&lt;p&gt;To load an &lt;code&gt;init_script&lt;/code&gt; we use the following control array structure:&lt;/p&gt;
&lt;pre&gt;
$autoLoadConfig[] = array(&#39;autoType&#39;=&gt;&#39;init_script&#39;, &#39;loadFile&#39;=&gt;&#39;init_database.php&#39;);
&lt;/pre&gt;
&lt;h4 id=&#34;classes&#34;&gt;classes&lt;/h4&gt;
&lt;p&gt;Classes often require special handling. With a class file we want to load the class file definition, then instantiate the class, and finally possibly run a class method (all running thus within the scope of &lt;code&gt;application_top.php&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;In terms of the control array we have the following entries to help us.&lt;/p&gt;
&lt;pre&gt;
  $autoLoadConfig[0][] = array(&#39;autoType&#39;=&gt;&#39;class&#39;,
                               &#39;loadFile&#39;=&gt;&#39;shopping_cart.php&#39;,
                               );
&lt;/pre&gt;
&lt;pre&gt;
 $autoLoadConfig[30][] = array(&#39;autoType&#39;=&gt;&#39;classInstantiate&#39;,
                               &#39;className&#39;=&gt;&#39;cache&#39;,
                               &#39;objectName&#39;=&gt;&#39;zc_cache&#39;,
                               );
&lt;/pre&gt;
&lt;pre&gt;
 $autoLoadConfig[80][] = array(&#39;autoType&#39;=&gt;&#39;classInstantiate&#39;,
                               &#39;className&#39;=&gt;&#39;shoppingCart&#39;,
                               &#39;objectName&#39;=&gt;&#39;cart&#39;,
                               &#39;checkInstantiated&#39;=&gt;true,
                               &#39;classSession&#39;=&gt;true,
                               );
&lt;/pre&gt;
&lt;pre&gt;
 $autoLoadConfig[120][] = array(&#39;autoType&#39;=&gt;&#39;objectMethod&#39;,
                                &#39;objectName&#39;=&gt;&#39;navigation&#39;,
                                &#39;methodName&#39; =&gt; &#39;add_current_page&#39;,
                                );
&lt;/pre&gt;
&lt;p&gt;Taking these options one by one&lt;/p&gt;
&lt;h4 id=&#34;class&#34;&gt;class&lt;/h4&gt;
&lt;p&gt;Where &lt;code&gt;autotype=&amp;gt;&#39;class&#39;&lt;/code&gt; all we are really doing here is &amp;lsquo;including&amp;rsquo; the &amp;rsquo;loadFile&amp;rsquo;. However, in this case we draw the file from the includes/classes (DIR_WS_CLASS) directory.&lt;/p&gt;
&lt;h4 id=&#34;classinstantiate&#34;&gt;classInstantiate&lt;/h4&gt;
&lt;p&gt;If &lt;code&gt;autotype=&amp;gt;&#39;classInstantiate&#39;&lt;/code&gt; is specified it instantiates the class as: &lt;code&gt;objectName = new className();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;An example based on the code above is&lt;/p&gt;
&lt;pre&gt;
$zc_cache = new cache();
&lt;/pre&gt;
&lt;h4 id=&#34;objectname&#34;&gt;objectName&lt;/h4&gt;
&lt;p&gt;One corollary to this is that we may need to instantiate a class that is bound to a session, like the shopping_cart class.
In this case as from the example above we get&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$_SESSION[&amp;#39;cart&amp;#39;] = new shoppingCart();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and in fact we take that one step further:&lt;/p&gt;
&lt;h4 id=&#34;checkinstantiated&#34;&gt;checkInstantiated&lt;/h4&gt;
&lt;p&gt;Normally we only want to instantiate a session object if it is not already a session object.
In this case we take advantage of the &lt;code&gt;checkInstantiated&lt;/code&gt; property, which would generate code:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if (!$_SESSION[&amp;#39;cart&amp;#39;]) {
   $_SESSION[&amp;#39;cart&amp;#39;] = new shoppingCart();  
 }  
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;objectmethod&#34;&gt;objectMethod&lt;/h4&gt;
&lt;p&gt;To call a class method in the scope of &lt;code&gt;application_top.php&lt;/code&gt;, use &lt;code&gt;autotype=&#39;objectMethod&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The code generated would be (based on the example above):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$navigation-&amp;gt;add_current_page();
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;classpath&#34;&gt;classPath&lt;/h4&gt;
&lt;p&gt;Unless otherwise specified, the path where a class file is expected to be found is the catalog classes directory.
To override that you can pass a &lt;code&gt;classPath&lt;/code&gt; of &lt;code&gt;DIR_WS_CLASSES&lt;/code&gt; or a specific directory path.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;
 $autoLoadConfig[0][] = array(&#39;autoType&#39;=&gt;&#39;class&#39;,
                              &#39;loadFile&#39;=&gt;&#39;split_page_results.php&#39;,
                              &#39;classPath&#39;=&gt;DIR_WS_CLASSES);
&lt;/pre&gt;
&lt;h3 id=&#34;extending-the-system-autoloader&#34;&gt;Extending the system autoloader&lt;/h3&gt;
&lt;p&gt;To add additional loading/instantiation actions, add a new file to the &lt;code&gt;/includes/auto_loader/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;The file you add here should have start with &lt;code&gt;config&lt;/code&gt; and have a &lt;code&gt;.php&lt;/code&gt; extension (ie: &lt;code&gt;config.yourapp_name.php&lt;/code&gt;), and should contain one or more control array definitions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is the recommended method&lt;/strong&gt; to use for adding code to be executed within &lt;code&gt;application_top.php&lt;/code&gt;, and allows contribution authors to customise the code here in a way that will be generally unaffected by system upgrades.&lt;/p&gt;
&lt;h3 id=&#34;init_scripts&#34;&gt;init_scripts&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;init_scripts&lt;/code&gt; allow us to run some procedural core code.&lt;/p&gt;
&lt;p&gt;And also allows 3rd party plugins to override that procedural code.&lt;/p&gt;
&lt;h4 id=&#34;core-init_scripts&#34;&gt;core init_scripts&lt;/h4&gt;
&lt;p&gt;There are several default init_scripts in core code, located in the &lt;code&gt;includes/init_includes&lt;/code&gt; directory. Similar files exist also in the Admin directory structure.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;*   init_add_crumbs.php (Responsible for initialising the Breadcrumb)
*   init_cart_handler.php (Responsible for handling Cart actions)
*   init_category_path.php (Responsible for initialising Category Paths)
*   init_currencies.php (Responsible for initialising the Currencies Sub-System)
*   init_customer_auth.php (Responsible for checking customer status, either thru Down for Maintenance or the Approval level)
*   init_database.php (Responsible for initialising the DB layer)
*   init_db_config_read.php (Responsible for reading configuration data from database)
*   init_file_db_names.php (Responsible for loading File and Database tablename Defines)
*   init_general_funcs.php (Responsible for loading general functions from the includes/functions directory as well as the extra_functions folder)
*   init_gzip.php (Responsible for loading Gzip output-buffering functions)
*   init_header.php (Responsible for running page-header procedures)
*   init_languages.php (Responsible for loading multiple-language support sub-system)
*   init_sanitize.php (Responsible for loading input-sanitising code)
*   init_sefu.php (Responsible for loading code to provide search-engine-friendly URLs)
*   init_sessions.php (Responsible for loading Session code)
*   init_special_funcs.php (Responsible for loading specialized but necessary functions)
*   init_templates.php (Responsible for initialising the template System and activating template-specific language-content defines)
*   init_tlds.php (Responsible for setting Top Level Domain Variables)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;overriding-init_scripts&#34;&gt;Overriding init_scripts&lt;/h4&gt;
&lt;p&gt;It is very simple to override a core init_script. The directory &lt;code&gt;includes/init_includes&lt;/code&gt; contains a directory called &lt;code&gt;overrides&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If I wanted to override the &lt;code&gt;includes/init_includes/init_sessions.php&lt;/code&gt; script then I would simply create a file called &lt;code&gt;init_sessions.php&lt;/code&gt; in the &lt;code&gt;includes/init_includes/overrides&lt;/code&gt; directory.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Notifier Report for Zen Cart 2.2.0</title>
      <link>https://docs.zen-cart.com/dev/architecture/notifier_report/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/notifier_report/</guid>
      <description>
        
        
        &lt;!-- RELEASETIME - update --&gt;
&lt;!-- 
To generate this file, run notifier_report.php?markdown on 
an installation of the latest version of Zen Cart.  Get the notifier report
from https://github.com/lat9/notifier_report 
--&gt; 
&lt;h4 id=&#34;ipn_main_handlerphp&#34;&gt;ipn_main_handler.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#363: &amp;#39;NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PROCESS&amp;#39;
#365: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_TOTALS_PROCESS&amp;#39;
#377: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&amp;#39;
#384: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&amp;#39;
#411: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS&amp;#39;, $insert_id, $order
#414: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL&amp;#39;
#458: &amp;#39;NOTIFY_CHECKOUT_PROCESS_HANDLE_AFFILIATES&amp;#39;, &amp;#39;paypalipn&amp;#39;
#554: &amp;#39;NOTIFY_PAYPALIPN_STATUS_HISTORY_UPDATE&amp;#39;, [$ordersID, $new_status, $txn_type]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesclassesobserversautopaypalrestfulphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/classes/observers/auto.paypalrestful.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#351: &amp;#39;NOTIFY_PAYPAL_PAYLATER_SELECTORS&amp;#39;, [&amp;#39;current_page_base&amp;#39; =&amp;gt; $current_page_base, &amp;#39;pageType&amp;#39; =&amp;gt; $pageType], $containingElement, $priceSelector, $outputElement, $messageStyles
#476: &amp;#39;NOTIFY_PAYPAL_PAYLATER_MESSAGE_OBJECTS&amp;#39;, $messagableObjects, $messagableObjects
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesmodulespaymentpaypalrphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/modules/payment/paypalr.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#1511: &amp;#39;NOTIFY_PAYPALR_BEFORE_PROCESS_FINISHED&amp;#39;, $this-&amp;gt;orderInfo
#1987: &amp;#39;NOTIFY_PAYPALR_FUNDS_CAPTURED&amp;#39;, $sql_data_array
#2264: &amp;#39;NOTIFY_PAYMENT_PAYPALR_INSTALLED&amp;#39;
#2362: &amp;#39;NOTIFY_PAYMENT_PAYPALR_UNINSTALLED&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesmodulespaymentpaypalpaypalrestfulppr_listenerphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/modules/payment/paypal/PayPalRestful/ppr_listener.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#36: &amp;#39;NOTIFY_PPR_LISTENER_UNKNOWN_OPERATION&amp;#39;, [&amp;#39;op&amp;#39; =&amp;gt; $op]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesmodulespaymentpaypalpaypalrestfuladmingetpaypalordertransactionsphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/modules/payment/paypal/PayPalRestful/Admin/GetPayPalOrderTransactions.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#354: &amp;#39;NOTIFY_PAYPALR_ADMIN_FUNDS_IN_OUT&amp;#39;, $sql_data_array
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesmodulespaymentpaypalpaypalrestfulwebhookseventspaymentcapturecompletedphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/modules/payment/paypal/PayPalRestful/Webhooks/Events/PaymentCaptureCompleted.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#89: &amp;#39;NOTIFY_PAYPALR_FUNDS_CAPTURED&amp;#39;, [&amp;#39;webhook&amp;#39; =&amp;gt; $this-&amp;gt;data]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginspaypalrestfulv200catalogincludesmodulespaymentpaypalpaypalrestfulwebhookseventscheckoutpaymentapprovalreversedphp&#34;&gt;zc_plugins/PayPalRestful/v2.0.0/catalog/includes/modules/payment/paypal/PayPalRestful/Webhooks/Events/CheckoutPaymentApprovalReversed.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#73: &amp;#39;NOTIFY_PAYPALR_ADMIN_FUNDS_IN_OUT&amp;#39;, [&amp;#39;webhook&amp;#39; =&amp;gt; $this-&amp;gt;data]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611catalogincludesclassesobserversclassproducts_options_stock_observerphp&#34;&gt;zc_plugins/POSM/v6.1.1/catalog/includes/classes/observers/class.products_options_stock_observer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#111: &amp;#39;NOTIFY_PRODUCTS_OPTIONS_STOCK_OBSERVER_INSTANTIATED&amp;#39;
#187:  &amp;#39;NOTIFY_POSM_ORDER_STOCK_DECREMENT_BEGIN&amp;#39;, [ &amp;#39;product&amp;#39; =&amp;gt; $order-&amp;gt;products[$i], &amp;#39;stock&amp;#39; =&amp;gt; $stock_record ], $bypass_stock_decrement, $decrement_options_stock 
#265:  &amp;#39;NOTIFY_POSM_ORDER_ADDED_PRODUCT_LINE_ITEM&amp;#39;, [ &amp;#39;product&amp;#39; =&amp;gt; $ordered_product, &amp;#39;stock&amp;#39; =&amp;gt; $pos_record, ], $decrement_stock, $decrement_managed_stock 
#621:  &amp;#39;NOTIFY_POSM_GET_IN_STOCK_MESSAGE&amp;#39;, [ &amp;#39;prid&amp;#39; =&amp;gt; $prid, &amp;#39;pos_record&amp;#39; =&amp;gt; $pos_record, ], $message_override, $use_in_stock_message, $show_mixed_stock_messages, $no_stock_message, $in_stock_message 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611catalogincludesclassesajaxzcajaxoptionsstockdependenciesphp&#34;&gt;zc_plugins/POSM/v6.1.1/catalog/includes/classes/ajax/zcAjaxOptionsStockDependencies.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#109: &amp;#39;NOTIFY_AJAX_POSM_DEPENDENCIES_SELECT_CLAUSE&amp;#39;, &amp;#39;&amp;#39;, $select_clause
#121: &amp;#39;NOTIFY_AJAX_POSM_DEPENDENCIES_EXTRA_INFO&amp;#39;, $attr_info-&amp;gt;fields, $extra_info
#145: &amp;#39;NOTIFY_AJAX_POSM_DEPENDENCIES_EXTENSION_INFO&amp;#39;, $option_values, $extra_functions
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611catalogincludestemplatesdefaultjscriptposm_dependencies_jscriptphp&#34;&gt;zc_plugins/POSM/v6.1.1/catalog/includes/templates/default/jscript/posm_dependencies_jscript.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#37: &amp;#39;NOTIFY_POSM_DEPENDENCIES_ENABLE_OVERRIDE&amp;#39;, [], $posm_dependent_attrs_enable
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611adminproducts_options_stock_view_allphp&#34;&gt;zc_plugins/POSM/v6.1.1/admin/products_options_stock_view_all.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#30: &amp;#39;NOTIFY_POSM_VIEW_ALL_UPDATE_INIT&amp;#39;
#74: &amp;#39;NOTIFY_POSM_VIEW_ALL_UPDATE&amp;#39;, $pos_id, $posm_sql_data, $where_str, $error, $onload
#102: &amp;#39;NOTIFY_POSM_VIEW_ALL_UPDATE_PRODUCT&amp;#39;, $product[&amp;#39;products_id&amp;#39;]
#218: &amp;#39;NOTIFY_POSM_VIEW_ALL_INSERT_HEAD&amp;#39;, &amp;#39;&amp;#39;, $onload, $css_content, $js_content
#241: &amp;#39;NOTIFY_POSM_VIEW_ALL_START_BODY&amp;#39;, &amp;#39;&amp;#39;, $static_field_count, $instructions2
#301: &amp;#39;NOTIFY_POSM_VIEW_ALL_TABLE_HEADING&amp;#39;, &amp;#39;&amp;#39;, $additional_content
#380:  &amp;#39;NOTIFY_POSM_VIEW_ALL_PRODUCTS_NAME&amp;#39;, $products_id, $products_name_extra_info, $additional_content 
#490: &amp;#39;NOTIFY_POSM_VIEW_ALL_INSERT_DATA&amp;#39;, $current_option[&amp;#39;fields&amp;#39;], $additional_content
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611adminincludesclassesobserversclassproducts_options_stock_admin_observerphp&#34;&gt;zc_plugins/POSM/v6.1.1/admin/includes/classes/observers/class.products_options_stock_admin_observer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#205:  &amp;#39;NOTIFY_POSM_EO_ADD_PRODUCT_BYPASS&amp;#39;, $info, $bypass_add 
#288:  &amp;#39;NOTIFY_POSM_EO_PRODUCT_ADD_STOCK_UPDATE&amp;#39;, [ &amp;#39;pos_record&amp;#39; =&amp;gt; $pos_record, &amp;#39;product&amp;#39; =&amp;gt; $info ], $bypass_managed_stock_update 
#752:  &amp;#39;NOTIFY_POSM_EO_REMOVED_BYPASS&amp;#39;, $parameters 
#833: &amp;#39;NOTIFY_POSM_EO_PRODUCT_ADDED_STOCK_UPDATE&amp;#39;, $parameters, $bypass_managed_stock_update
#967: &amp;#39;NOTIFY_POSM_EO_PRODUCT_CHANGED_STOCK_UPDATE&amp;#39;, $parameters, $bypass_managed_stock_update
#1102:  &amp;#39;NOTIFY_POSM_GET_PRODUCT_STOCK_MESSAGE_BYPASS&amp;#39;, [ &amp;#39;prid&amp;#39; =&amp;gt; $prid, &amp;#39;pos_record&amp;#39; =&amp;gt; $pos_record, &amp;#39;prod_info&amp;#39; =&amp;gt; $product-&amp;gt;fields ?? [], &amp;#39;original_name&amp;#39; =&amp;gt; $original_name, &amp;#39;available_qty&amp;#39; =&amp;gt; $available_qty, &amp;#39;original_qty&amp;#39; =&amp;gt; $original_qty, &amp;#39;changed_qty&amp;#39; =&amp;gt; $changed_qty, &amp;#39;ordered_in_stock&amp;#39; =&amp;gt; $ordered_in_stock, &amp;#39;ordered_out_of_stock&amp;#39; =&amp;gt; $ordered_out_of_stock, ], $msg_text_override, $force_out_of_stock_message 
#1409:  &amp;#39;NOTIFY_POSM_EO_REMOVE_PRODUCT_QUANTITY_BYPASS&amp;#39;, $orders_products_id, $bypass_quantity_updates 
#1568:  &amp;#39;NOTIFY_POSM_GET_IN_STOCK_MESSAGE_BYPASS&amp;#39;, [ &amp;#39;op_info&amp;#39; =&amp;gt; $op_info, &amp;#39;prod_info&amp;#39; =&amp;gt; $prod_info, &amp;#39;pos_info&amp;#39; =&amp;gt; $check, ], $msg_text_override, $force_out_of_stock_message 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611adminincludesfunctionsproducts_options_stock_admin_functionsphp&#34;&gt;zc_plugins/POSM/v6.1.1/admin/includes/functions/products_options_stock_admin_functions.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#199:  &amp;#39;POSM_MAIN_OPTION_INSERTED&amp;#39;, [ &amp;#39;pID&amp;#39; =&amp;gt; $pID, &amp;#39;options_values_array&amp;#39; =&amp;gt; $options_values_array, &amp;#39;quantity&amp;#39; =&amp;gt; $quantity, &amp;#39;pos_id&amp;#39; =&amp;gt; $pos_id ] 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;zc_pluginsposmv611adminproducts_options_stockphp&#34;&gt;zc_plugins/POSM/v6.1.1/admin/products_options_stock.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#163: &amp;#39;NOTIFY_POSM_UPDATE_PREPARE_INPUTS&amp;#39;, $qty_count, $missing_inputs_flag, $error, $onload
#229:  &amp;#39;NOTIFY_POSM_UPDATE_DATABASE_RECORD&amp;#39;, [ &amp;#39;pos_id&amp;#39; =&amp;gt; $pos_id, &amp;#39;pID&amp;#39; =&amp;gt; $pID, ], $update_posm_record_sql, $error, $onload 
#270: &amp;#39;NOTIFY_POSM_REMOVE_OPTIONS&amp;#39;, $pID
#527: &amp;#39;NOTIFY_POSM_INSERT_HEAD&amp;#39;, &amp;#39;&amp;#39;, $onload, $css_content, $js_content
#648: &amp;#39;NOTIFY_POSM_ADD_PRODUCT_OPTION&amp;#39;, $next_option, $pos_product_options
#697: &amp;#39;NOTIFY_POSM_START_HTML_OUTPUT&amp;#39;, [], $static_field_count
#888: &amp;#39;NOTIFY_POSM_UPPER_HEADING_INSERT&amp;#39;, &amp;#39;&amp;#39;, $additional_content
#943: &amp;#39;NOTIFY_POSM_UPPER_CONTENT_INSERT&amp;#39;, &amp;#39;&amp;#39;, $additional_content
#1039: &amp;#39;NOTIFY_POSM_SET_INSTRUCTIONS&amp;#39;, $pID, $additional_instructions
#1090: &amp;#39;NOTIFY_POSM_LOWER_HEADING_INSERT_B4_QTY&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#1129: &amp;#39;NOTIFY_POSM_LOWER_HEADING_INSERT_AFTER_QTY&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#1189: &amp;#39;NOTIFY_POSM_SET_UPDATE_BUTTON_PARAMETERS&amp;#39;, &amp;#39;&amp;#39;, $posm_update_button_parms
#1307:  &amp;#39;NOTIFY_POSM_LOWER_CONTENT_INSERT_B4_QTY&amp;#39;, [ &amp;#39;pos_id&amp;#39; =&amp;gt; $pos_id, &amp;#39;info_array&amp;#39; =&amp;gt; $info_array, &amp;#39;action&amp;#39; =&amp;gt; $action, ], $lower_content 
#1353:  &amp;#39;NOTIFY_POSM_LOWER_CONTENT_INSERT_AFTER_QTY&amp;#39;, [ &amp;#39;pos_id&amp;#39; =&amp;gt; $pos_id, &amp;#39;info_array&amp;#39; =&amp;gt; $info_array, &amp;#39;action&amp;#39; =&amp;gt; $action, ], $lower_content 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesshopping_cartphp&#34;&gt;includes/classes/shopping_cart.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#85: &amp;#39;NOTIFIER_CART_INSTANTIATE_START&amp;#39;
#87: &amp;#39;NOTIFIER_CART_INSTANTIATE_END&amp;#39;
#108: &amp;#39;NOTIFIER_CART_RESTORE_CONTENTS_START&amp;#39;
#193: &amp;#39;NOTIFIER_CART_RESTORE_CONTENTS_END&amp;#39;
#212: &amp;#39;NOTIFIER_CART_RESET_START&amp;#39;, null, $reset_database
#236: &amp;#39;NOTIFIER_CART_RESET_END&amp;#39;
#285: &amp;#39;NOTIFIER_CART_ADD_CART_START&amp;#39;, null, $product_id, $qty, $attributes, $notify
#382: &amp;#39;NOTIFIER_CART_ADD_CART_END&amp;#39;, null, $product_id, $qty, $attributes, $notify
#414: &amp;#39;NOTIFIER_CART_UPDATE_QUANTITY_START&amp;#39;, null, $uprid, $quantity, $attributes
#497: &amp;#39;NOTIFIER_CART_UPDATE_QUANTITY_END&amp;#39;
#513: &amp;#39;NOTIFIER_CART_CLEANUP_START&amp;#39;
#519: &amp;#39;NOTIFIER_CART_CLEANUP_END&amp;#39;
#563: &amp;#39;NOTIFIER_CART_COUNT_CONTENTS_START&amp;#39;
#570: &amp;#39;NOTIFIER_CART_COUNT_CONTENTS_END&amp;#39;
#586: &amp;#39;NOTIFIER_CART_GET_QUANTITY_START&amp;#39;, null, $uprid
#588: &amp;#39;NOTIFIER_CART_GET_QUANTITY_END_QTY&amp;#39;, null, $uprid
#592: &amp;#39;NOTIFIER_CART_GET_QUANTITY_END_FALSE&amp;#39;, $uprid
#605: &amp;#39;NOTIFIER_CART_IN_CART_START&amp;#39;, null, $uprid
#607: &amp;#39;NOTIFIER_CART_IN_CART_END_TRUE&amp;#39;, null, $uprid
#611: &amp;#39;NOTIFIER_CART_IN_CART_END_FALSE&amp;#39;, $uprid
#624: &amp;#39;NOTIFIER_CART_REMOVE_START&amp;#39;, null, $uprid
#629: &amp;#39;NOTIFIER_CART_REMOVE_END&amp;#39;
#638: &amp;#39;NOTIFIER_CART_REMOVE_ALL_START&amp;#39;
#640: &amp;#39;NOTIFIER_CART_REMOVE_ALL_END&amp;#39;
#698: &amp;#39;NOTIFY_CART_CALCULATE_PRODUCT_PRICE&amp;#39;, $uprid, $product
#763: &amp;#39;NOTIFY_CART_CALCULATE_ATTRIBUTE_PRICE&amp;#39;, $uprid, $attribute_price-&amp;gt;fields
#953: &amp;#39;NOTIFY_CART_CALCULATE_ATTRIBUTE_WEIGHT&amp;#39;, [&amp;#39;products_id&amp;#39; =&amp;gt; $uprid, &amp;#39;options_id&amp;#39; =&amp;gt; $option], $attribute_weight-&amp;gt;fields
#1016: &amp;#39;NOTIFY_CART_ATTRIBUTES_PRICE_START&amp;#39;, $uprid
#1035: &amp;#39;NOTIFY_CART_ATTRIBUTES_PRICE_NEXT&amp;#39;, $uprid, $attribute_price
#1137: &amp;#39;NOTIFY_CART_ATTRIBUTES_PRICE_ONETIME_CHARGES_START&amp;#39;, $uprid
#1152: &amp;#39;NOTIFY_CART_ATTRIBUTES_PRICE_ONETIME_CHARGES_NEXT&amp;#39;, $uprid, $attribute_price
#1203: &amp;#39;NOTIFY_CART_ATTRIBUTES_WEIGHT_START&amp;#39;, $uprid
#1213: &amp;#39;NOTIFY_CART_ATTRIBUTES_WEIGHT_NEXT&amp;#39;, $uprid, $attribute_weight_info-&amp;gt;fields
#1240: &amp;#39;NOTIFIER_CART_GET_PRODUCTS_START&amp;#39;, null, $check_for_valid_cart
#1255: &amp;#39;NOTIFY_CART_GET_PRODUCTS_NEXT&amp;#39;, $uprid, $product
#1428: &amp;#39;NOTIFIER_CART_GET_PRODUCTS_END&amp;#39;, null, $products_array
#1440: &amp;#39;NOTIFIER_CART_SHOW_TOTAL_START&amp;#39;
#1442: &amp;#39;NOTIFIER_CART_SHOW_TOTAL_END&amp;#39;
#1454: &amp;#39;NOTIFIER_CART_SHOW_TOTAL_BEFORE_DISCOUNT_START&amp;#39;
#1456: &amp;#39;NOTIFIER_CART_SHOW_TOTAL_BEFORE_DISCOUNT_END&amp;#39;
#1916: &amp;#39;NOTIFIER_CART_OPTIONAL_SUCCESS_UPDATED_CART&amp;#39;, $_POST, $goto, $parameters
#2124: &amp;#39;NOTIFIER_CART_OPTIONAL_SUCCESS_PRODUCT_ADDED_TO_CART&amp;#39;, $_POST, $goto, $parameters
#2132: &amp;#39;NOTIFIER_CART_OPTIONAL_ATTRIBUTE_ERROR_MESSAGE_HOOK&amp;#39;, $_POST, $the_list
#2190: &amp;#39;NOTIFIER_CART_OPTIONAL_SUCCESS_BUYNOW_ADDED_TO_CART&amp;#39;, $_GET, $goto, $parameters
#2280: &amp;#39;NOTIFIER_CART_OPTIONAL_SUCCESS_MULTIPLE_ADDED_TO_CART&amp;#39;, $products_list, $goto, $parameters
#2409: &amp;#39;NOTIFY_CART_USER_ACTION&amp;#39;, null, $goto, $parameters
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassescategoryphp&#34;&gt;includes/classes/Category.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#191: &amp;#39;NOTIFY_GET_CATEGORY_OBJECT_DETAILS&amp;#39;, $category_id, $data
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesproductphp&#34;&gt;includes/classes/Product.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#194: &amp;#39;NOTIFY_GET_PRODUCT_ALLOW_ADD_TO_CART&amp;#39;, self::$product_id, $allow_add_to_cart, self::$data
#206: &amp;#39;NOTIFY_GET_PRODUCT_QUANTITY&amp;#39;, self::$product_id, $quantity
#304: &amp;#39;NOTIFY_GET_PRODUCT_OBJECT_DETAILS_NOT_FOUND&amp;#39;, [&amp;#39;product_id&amp;#39; =&amp;gt; $product_id, &amp;#39;language_id&amp;#39; =&amp;gt; $language_id], $data_override
#336: &amp;#39;NOTIFY_PRODUCT_DETAILS_NO_DESCRIPTION&amp;#39;, (int)$product_id, $data
#372: &amp;#39;NOTIFY_GET_PRODUCT_OBJECT_DETAILS&amp;#39;, $product_id, $data
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesviewbuildersdatatabledatasourcephp&#34;&gt;includes/classes/ViewBuilders/DataTableDataSource.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#24: &amp;#39;NOTIFY_DATASOURCE_CONSTRUCTOR_END&amp;#39;
#38: &amp;#39;NOTIFY_DATASOURCE_PROCESSREQUEST&amp;#39;, [], $query
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesviewbuildersbasecontrollerphp&#34;&gt;includes/classes/ViewBuilders/BaseController.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#36: &amp;#39;NOTIFY_TABLEVIEW_PROCESSREQUEST&amp;#39;, [], $method
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesviewbuilderspluginmanagercontrollerphp&#34;&gt;includes/classes/ViewBuilders/PluginManagerController.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#272: &amp;#39;NOTIFY_PLUGINMANAGER_DO_UNINSTALL&amp;#39;, [&amp;#39;plugin_key&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;unique_key&amp;#39;), &amp;#39;version&amp;#39; =&amp;gt; $this-&amp;gt;request-&amp;gt;input(&amp;#39;version&amp;#39;)]
#388: &amp;#39;NOTIFY_PLUGINMANAGER_DO_UPGRADE&amp;#39;, [&amp;#39;plugin_key&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;unique_key&amp;#39;), &amp;#39;version&amp;#39; =&amp;gt; $this-&amp;gt;request-&amp;gt;input(&amp;#39;version&amp;#39;), &amp;#39;old_version&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;version&amp;#39;)]
#488: &amp;#39;NOTIFY_PLUGINMANAGER_DO_CLEANUP&amp;#39;, [&amp;#39;plugin_key&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;unique_key&amp;#39;), &amp;#39;version&amp;#39; =&amp;gt; $this-&amp;gt;request-&amp;gt;input(&amp;#39;version&amp;#39;)]
#531: &amp;#39;NOTIFY_PLUGINMANAGER_DO_ENABLE&amp;#39;, [&amp;#39;plugin_key&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;unique_key&amp;#39;), &amp;#39;version&amp;#39; =&amp;gt; $this-&amp;gt;request-&amp;gt;input(&amp;#39;version&amp;#39;)]
#575: &amp;#39;NOTIFY_PLUGINMANAGER_DO_DISABLE&amp;#39;, [&amp;#39;plugin_key&amp;#39; =&amp;gt; $this-&amp;gt;currentFieldValue(&amp;#39;unique_key&amp;#39;), &amp;#39;version&amp;#39; =&amp;gt; $this-&amp;gt;request-&amp;gt;input(&amp;#39;version&amp;#39;)]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesorderphp&#34;&gt;includes/classes/order.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#128: &amp;#39;NOTIFY_ORDER_INSTANTIATE&amp;#39;, [], $order_id
#152: &amp;#39;NOTIFY_ORDER_BEFORE_QUERY&amp;#39;, [], $order_id
#186: &amp;#39;NOTIFY_ORDER_COUPON_LINK&amp;#39;, $coupon_link-&amp;gt;fields, $zc_coupon_link
#356: &amp;#39;NOTIFY_ORDER_QUERY_ADD_PRODUCT&amp;#39;, $this-&amp;gt;products[$index], $index, $orders_products-&amp;gt;fields
#364: &amp;#39;NOTIFY_ORDER_AFTER_QUERY&amp;#39;, IS_ADMIN_FLAG, $this-&amp;gt;orderId, $order-&amp;gt;fields
#371: &amp;#39;ORDER_QUERY_ADMIN_COMPLETE&amp;#39;, [&amp;#39;orders_id&amp;#39; =&amp;gt; $this-&amp;gt;orderId]
#467: &amp;#39;NOTIFY_ORDER_CART_BEGINS&amp;#39;
#591: &amp;#39;NOTIFY_ORDER_CART_ADDRESS_OVERRIDES&amp;#39;, $current_addresses, $customer_address_override, $delivery_address_override, $billing_address_override
#608: &amp;#39;NOTIFY_ORDER_CART_AFTER_ADDRESSES_SET&amp;#39;, &amp;#39;&amp;#39;, $taxCountryId, $taxZoneId
#646: &amp;#39;NOTIFY_ORDER_CART_ADD_PRODUCT_LIST&amp;#39;, [&amp;#39;index&amp;#39; =&amp;gt; $index, &amp;#39;products&amp;#39; =&amp;gt; $products[$i]], $attributes_handled
#687: &amp;#39;NOTIFY_ORDER_CART_ADD_ATTRIBUTE_LIST&amp;#39;, [&amp;#39;index&amp;#39; =&amp;gt; $index, &amp;#39;subindex&amp;#39; =&amp;gt; $subindex, &amp;#39;products&amp;#39; =&amp;gt; $products[$i], &amp;#39;attributes&amp;#39; =&amp;gt; $attributes]
#727: &amp;#39;NOTIFY_ORDER_CART_FINISHED&amp;#39;
#784: &amp;#39;NOTIFY_ORDER_CART_EXTERNAL_TAX_RATE_LOOKUP&amp;#39;, STORE_PRODUCT_TAX_BASIS, $products, $loop, $index, $taxCountryId, $taxZoneId, $taxRates
#832: &amp;#39;NOTIFY_ORDER_CART_SUBTOTAL_CALCULATE&amp;#39;, [&amp;#39;shown_price&amp;#39; =&amp;gt; $shown_price]
#868: &amp;#39;NOTIFY_ORDER_CART_EXTERNAL_TAX_DURING_ORDER_CREATE&amp;#39;, [], $zf_ot_modules
#879: &amp;#39;NOTIFY_ORDER_CART_ORDERSTATUS&amp;#39;
#948: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_HEADER&amp;#39;, array_merge([&amp;#39;orders_id&amp;#39; =&amp;gt; $this-&amp;gt;orderId, &amp;#39;shipping_weight&amp;#39; =&amp;gt; $_SESSION[&amp;#39;cart&amp;#39;]-&amp;gt;weight], $sql_data_array), $this-&amp;gt;orderId
#962: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_ORDERTOTAL_LINE_ITEM&amp;#39;, $sql_data_array, $ot_insert_id
#990: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_COMMENT&amp;#39;, $sql_data_array, $osh_insert_id
#1004: &amp;#39;NOTIFIER_ADMIN_ZEN_REMOVE_ORDER&amp;#39;, [], $this-&amp;gt;orderId, $restock
#1062: &amp;#39;NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_INIT&amp;#39;, [&amp;#39;i&amp;#39; =&amp;gt; $i], $this-&amp;gt;products[$i], $i
#1086: &amp;#39;NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_BEGIN&amp;#39;, $i, $stock_values
#1113: &amp;#39;NOTIFY_ORDER_PROCESSING_BESTSELLERS_UPDATE&amp;#39;, [], $this-&amp;gt;products[$i], $i
#1118: &amp;#39;NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_END&amp;#39;, $i
#1148: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_PRODUCT_LINE_ITEM&amp;#39;, array_merge([&amp;#39;orders_products_id&amp;#39; =&amp;gt; $order_products_id, &amp;#39;i&amp;#39; =&amp;gt; $i], $sql_data_array), $order_products_id
#1150: &amp;#39;NOTIFY_ORDER_PROCESSING_CREDIT_ACCOUNT_UPDATE_BEGIN&amp;#39;
#1153: &amp;#39;NOTIFY_ORDER_PROCESSING_ATTRIBUTES_BEGIN&amp;#39;
#1247: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_LINE_ITEM&amp;#39;, array_merge([&amp;#39;orders_products_attributes_id&amp;#39; =&amp;gt; $opa_insert_id], $sql_data_array), $opa_insert_id
#1262: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_DOWNLOAD_LINE_ITEM&amp;#39;, $sql_data_array, $opd_insert_id
#1268: &amp;#39;NOTIFY_ORDER_PROCESSING_ATTRIBUTES_EXIST&amp;#39;, $attributes_exist
#1270: &amp;#39;NOTIFY_ORDER_DURING_CREATE_ADD_PRODUCTS&amp;#39;, $i, $custom_insertable_text
#1298: &amp;#39;NOTIFY_ORDER_PROCESSING_ONE_TIME_CHARGES_BEGIN&amp;#39;, $i
#1319: &amp;#39;NOTIFY_ORDER_AFTER_ORDER_CREATE_ADD_PRODUCTS&amp;#39;
#1333: &amp;#39;NOTIFY_ORDER_SEND_EMAIL_INITIALIZE&amp;#39;, [], $zf_insert_id, $order_totals, $zf_mode
#1336: &amp;#39;NOTIFY_ORDER_SEND_LOW_STOCK_EMAILS&amp;#39;
#1381: &amp;#39;NOTIFY_ORDER_EMAIL_BEFORE_PRODUCTS&amp;#39;, [], $email_order, $html_msg
#1449: &amp;#39;NOTIFY_ORDER_SET_ORDER_MESSAGE&amp;#39;
#1473: &amp;#39;NOTIFY_ORDER_INVOICE_CONTENT_READY_TO_SEND&amp;#39;, [&amp;#39;zf_insert_id&amp;#39; =&amp;gt; $zf_insert_id, &amp;#39;text_email&amp;#39; =&amp;gt; $email_order, &amp;#39;html_email&amp;#39; =&amp;gt; $html_msg], $email_order, $html_msg, $send_customer_email, $customer_email_reply_to_name, $customer_email_reply_to_address
#1495: &amp;#39;NOTIFY_ORDER_INVOICE_CONTENT_FOR_ADDITIONAL_EMAILS&amp;#39;, $zf_insert_id, $email_order, $html_msg, $sendExtraOrderEmail
#1507: &amp;#39;NOTIFY_ORDER_AFTER_SEND_ORDER_EMAIL&amp;#39;, $zf_insert_id, $email_order, $extra_info, $html_msg
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesshippingphp&#34;&gt;includes/classes/shipping.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#49: &amp;#39;NOTIFY_SHIPPING_CLASS_GET_INSTALLED_MODULES&amp;#39;, $module
#110: &amp;#39;NOTIFY_SHIPPING_MODULE_ENABLE&amp;#39;, $quote_module[&amp;#39;class&amp;#39;], $quote_module[&amp;#39;class&amp;#39;]
#152: &amp;#39;NOTIFY_SHIPPING_CHECK_ENABLED_FOR_ZONE&amp;#39;, [], $module_class, $enabled
#157: &amp;#39;NOTIFY_SHIPPING_CHECK_ENABLED&amp;#39;, [], $module_class, $enabled
#174: &amp;#39;NOTIFY_SHIPPING_MODULE_PRE_CALCULATE_BOXES_AND_TARE&amp;#39;, [], $total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes
#216: &amp;#39;NOTIFY_SHIPPING_MODULE_CALCULATE_BOXES_AND_TARE&amp;#39;, [], $total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes
#275: &amp;#39;NOTIFY_SHIPPING_MODULE_GET_ALL_QUOTES&amp;#39;, $quotes_array, $quotes_array
#331: &amp;#39;NOTIFY_SHIPPING_EXCLUDE_FROM_CHEAPEST&amp;#39;, $rate[&amp;#39;module&amp;#39;], $exclude_from_cheapest
#341: &amp;#39;NOTIFY_SHIPPING_MODULE_CALCULATE_CHEAPEST&amp;#39;, $cheapest, $cheapest, $rates
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesclasssearchphp&#34;&gt;includes/classes/class.search.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#124: &amp;#39;NOTIFY_ADVANCED_SEARCH_RESULTS_ADDL_CLAUSE&amp;#39;, [], $search_additional_clause
#239: &amp;#39;NOTIFY_SEARCH_COLUMNLIST_STRING&amp;#39;, $select_column_list, $select_column_list
#251: &amp;#39;NOTIFY_SEARCH_SELECT_STRING&amp;#39;, $select_str, $select_str
#281: &amp;#39;NOTIFY_SEARCH_FROM_STRING&amp;#39;, $from_str, $from_str
#347: &amp;#39;NOTIFY_SEARCH_MATCHING_KEYWORD_FIELDS&amp;#39;, &amp;#39;&amp;#39;, $keyword_search_fields
#404: &amp;#39;NOTIFY_SEARCH_WHERE_STRING&amp;#39;, $this-&amp;gt;searchOptions-&amp;gt;keywords, $where_str, $keyword_search_fields
#477: &amp;#39;NOTIFY_SEARCH_REAL_ORDERBY_STRING&amp;#39;, $order_str, $order_str
#480: &amp;#39;NOTIFY_SEARCH_LISTING_QUERY_STRING&amp;#39;, [&amp;#39;default&amp;#39;], $listing_sql, $where_str, $order_str
#484: &amp;#39;NOTIFY_SEARCH_ORDERBY_STRING&amp;#39;, $listing_sql
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassespaymentphp&#34;&gt;includes/classes/payment.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#62: &amp;#39;NOTIFY_PAYMENT_CLASS_GET_INSTALLED_MODULES&amp;#39;, $module
#121: &amp;#39;NOTIFY_PAYMENT_MODULE_ENABLE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassescustomerphp&#34;&gt;includes/classes/Customer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#74: &amp;#39;NOTIFY_GET_CUSTOMER_WHOLESALE_INFO&amp;#39;, $wholesale-&amp;gt;fields ?? [], $wholesaleInfo
#97: &amp;#39;NOTIFY_CUSTOMER_IS_TAX_EXEMPT&amp;#39;, [], $is_tax_exempt
#254: &amp;#39;NOTIFY_ZEN_IS_CURRENTLY_LOGGED_IN&amp;#39;, null, $is_currently_logged_in
#265: &amp;#39;NOTIFY_ZEN_IS_LOGGED_IN&amp;#39;, null, $is_logged_in
#309: //@TODO        &amp;#39;NOTIFY_?LOGIN_ATTEMPT&amp;#39;, null, $is_logged_in
#532: &amp;#39;NOTIFY_ZEN_IN_GUEST_CHECKOUT&amp;#39;, null, $in_guest_checkout
#627: &amp;#39;NOTIFY_CUSTOMER_DATA_LOADED&amp;#39;, $this-&amp;gt;data, $this-&amp;gt;data
#772: &amp;#39;NOTIFY_CUSTOMER_PRICING_GROUP_LOADED&amp;#39;, $this-&amp;gt;data
#805: &amp;#39;NOTIFY_CUSTOMER_CHECK_IF_BANNED&amp;#39;, $this-&amp;gt;data, $banned_status
#817: &amp;#39;NOTIFY_BAN_CUSTOMER&amp;#39;, $this-&amp;gt;data, $proceed_with_ban, $reset_shopping_session_and_basket
#1261: &amp;#39;NOTIFY_CUSTOMER_AFTER_RECORD_DELETED&amp;#39;, (int)$this-&amp;gt;customer_id
#1273: &amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDING_CUSTOMER_RECORD&amp;#39;, null, $data
#1315: &amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&amp;#39;, array_merge([&amp;#39;customer_id&amp;#39; =&amp;gt; $customer_id], $sql_data_array)
#1351: &amp;#39;NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_ADDRESS_BOOK_RECORD&amp;#39;, array_merge([&amp;#39;address_id&amp;#39; =&amp;gt; $address_id], $sql_data_array)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesorder_totalphp&#34;&gt;includes/classes/order_total.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#92: &amp;#39;NOTIFY_ORDER_TOTAL_PROCESS_STARTS&amp;#39;, [&amp;#39;order_info&amp;#39; =&amp;gt; $order-&amp;gt;info]
#100: &amp;#39;NOTIFY_ORDER_TOTAL_PROCESS_NEXT&amp;#39;, [&amp;#39;class&amp;#39; =&amp;gt; $class, &amp;#39;order_info&amp;#39; =&amp;gt; $order-&amp;gt;info, &amp;#39;ot_output&amp;#39; =&amp;gt; $GLOBALS[$class]-&amp;gt;output]
#244: &amp;#39;NOTIFY_ORDER_TOTAL_PRE_CONFIRMATION_CHECK_STARTS&amp;#39;, [&amp;#39;order_info&amp;#39; =&amp;gt; $orderInfoSaved]
#248: &amp;#39;NOTIFY_ORDER_TOTAL_PRE_CONFIRMATION_CHECK_NEXT&amp;#39;, [&amp;#39;class&amp;#39; =&amp;gt; $class, &amp;#39;order_info&amp;#39; =&amp;gt; $order-&amp;gt;info, &amp;#39;ot_output&amp;#39; =&amp;gt; $GLOBALS[$class]-&amp;gt;output]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesdbmysqlquery_factoryphp&#34;&gt;includes/classes/db/mysql/query_factory.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#1119: &amp;#39;NOTIFY_QUERY_FACTORY_META_DEFAULT&amp;#39;, [&amp;#39;field&amp;#39; =&amp;gt; $field, &amp;#39;type&amp;#39; =&amp;gt; $type], $this-&amp;gt;max_length
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassescouponvalidationphp&#34;&gt;includes/classes/CouponValidation.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#38: &amp;#39;NOTIFY_COUPON_ADDITIONAL_CHECKS&amp;#39;, $product-&amp;gt;fields, $coupon_id, $product_can_use_coupon
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesquerybuilderphp&#34;&gt;includes/classes/QueryBuilder.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#53: &amp;#39;NOTIFY_QUERYBUILDER_INIT_START&amp;#39;
#69: &amp;#39;NOTIFY_QUERYBUILDER_INIT_END&amp;#39;
#82: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSQUERY_START&amp;#39;
#96: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSQUERY_END&amp;#39;
#104: &amp;#39;NOTIFY_QUERYBUILDER_SETFINALQUERY_START&amp;#39;
#112: &amp;#39;NOTIFY_QUERYBUILDER_SETFINALQUERY_END&amp;#39;
#121: &amp;#39;NOTIFY_QUERYBUILDER_PREPROCESSJOINS_START&amp;#39;
#126: &amp;#39;NOTIFY_QUERYBUILDER_PREPROCESSJOINS_END&amp;#39;
#136: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINS_START&amp;#39;
#148: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINS_END&amp;#39;
#159: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINSCUSTOMAND_START&amp;#39;
#163: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINSCUSTOMAND_END&amp;#39;
#174: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINADDCOLUMN_START&amp;#39;
#182: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINADDCOLUMN_ENDT&amp;#39;
#193: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINFKEYFIELD_START&amp;#39;
#210: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSJOINFKEYFIELD_END&amp;#39;
#219: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSE_START&amp;#39;
#231: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSE_END&amp;#39;
#242: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSETEST_START&amp;#39;
#255: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSETEST_END&amp;#39;
#264: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSORDERBYS_START&amp;#39;
#279: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSORDERBYS_END&amp;#39;
#288: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSGROUPBYS_START&amp;#39;
#303: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSGROUPBYS_END&amp;#39;
#337: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSSELECTLIST_START&amp;#39;
#345: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSSELECTLIST_END&amp;#39;
#354: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSBINDVARS_START&amp;#39;
#364: &amp;#39;NOTIFY_QUERYBUILDER_PROCESSBINDVARS_END&amp;#39;
#398: &amp;#39;NOTIFY_QUERYBUILDER_SETPARTS_START&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesobserversautodownloads_via_streamingphp&#34;&gt;includes/classes/observers/auto.downloads_via_streaming.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#43: &amp;#39;NOTIFY_DOWNLOAD_WITHOUT_REDIRECT___COMPLETED&amp;#39;, $origin_filename
#55: &amp;#39;NOTIFY_DOWNLOAD_IN_CHUNKS___COMPLETED&amp;#39;, $origin_filename
#78: &amp;#39;NOTIFY_DOWNLOAD_WITHOUT_REDIRECT_VIA_CHUNKS___COMPLETED&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesobserversautodownloads_via_redirectphp&#34;&gt;includes/classes/observers/auto.downloads_via_redirect.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#79: &amp;#39;NOTIFY_DOWNLOAD_VIA_SYMLINK___BEGINS&amp;#39;, array($download_link, $origin_filename, $tempdir)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesclassesajaxzcajaxadminsessionchangephp&#34;&gt;includes/classes/ajax/zcAjaxAdminSessionChange.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#31: &amp;#39;NOTIFY_AJAX_ADMIN_NOTIFICATIONS&amp;#39;, &amp;#39;&amp;#39;, $other_names
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesinit_includesinit_sanitizephp&#34;&gt;includes/init_includes/init_sanitize.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#19: &amp;#39;NOTIFY_INIT_SANITIZE_STARTS&amp;#39;
#24: &amp;#39;NOTIFY_INIT_SANITIZE_GET_VAR_CHECK&amp;#39;, [&amp;#39;name&amp;#39; =&amp;gt; $varname, &amp;#39;value&amp;#39; =&amp;gt; $varvalue,], $get_var_override
#328: &amp;#39;NOTIFY_INIT_SANITIZE_ENDS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesinit_includesinit_languagesphp&#34;&gt;includes/init_includes/init_languages.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_LANGUAGE_CHANGE_REQUESTED_BY_VISITOR&amp;#39;, $_GET[&amp;#39;language&amp;#39;], $lng
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesinit_includesinit_canonicalphp&#34;&gt;includes/init_includes/init_canonical.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#102: &amp;#39;NOTIFY_INIT_CANONICAL_PARAM_WHITELIST&amp;#39;, $current_page, $excludeParams, $keepableParams, $includeCPath
#179: &amp;#39;NOTIFY_INIT_CANONICAL_DEFAULT&amp;#39;, $current_page, $excludeParams, $canonicalLink
#182: &amp;#39;NOTIFY_INIT_CANONICAL_FINAL&amp;#39;, $current_page, $excludeParams, $canonicalLink
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesinit_includesinit_customer_authphp&#34;&gt;includes/init_includes/init_customer_auth.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#56: &amp;#39;NOTIFY_LOGIN_BANNED&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesinit_includesinit_add_crumbsphp&#34;&gt;includes/init_includes/init_add_crumbs.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#61: &amp;#39;NOTIFY_INIT_ADD_CRUMBS_GET_TERMS_LINK_PARAMETERS&amp;#39;, $next_get_term, $link_parameters
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesindex_filtersdefault_filterphp&#34;&gt;includes/index_filters/default_filter.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#147: &amp;#39;NOTIFY_PRODUCT_LISTING_QUERY_STRING&amp;#39;, [&amp;#39;default&amp;#39;], $listing_sql, $where_str, $order_by
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesindex_filtersmusic_genre_filterphp&#34;&gt;includes/index_filters/music_genre_filter.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#143: &amp;#39;NOTIFY_PRODUCT_LISTING_QUERY_STRING&amp;#39;, [&amp;#39;music_genre&amp;#39;], $listing_sql, $where_str, $order_by
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesindex_filtersrecord_company_filterphp&#34;&gt;includes/index_filters/record_company_filter.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#144: &amp;#39;NOTIFY_PRODUCT_LISTING_QUERY_STRING&amp;#39;, [&amp;#39;record_company&amp;#39;], $listing_sql, $where_str, $order_by
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionshtml_outputphp&#34;&gt;includes/functions/html_output.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#19: &amp;#39;NOTIFY_SEFU_INTERCEPT&amp;#39;, array(), $link, $page, $parameters, $connection, $add_session_id, $static, $use_dir_ws_catalog
#221: &amp;#39;NOTIFY_HANDLE_IMAGE&amp;#39;, [$newimg]
#229: &amp;#39;NOTIFY_OPTIMIZE_IMAGE&amp;#39;, $template_dir, $src, $title, $width, $height, $parameters
#311: &amp;#39;PAGE_OUTPUT_IMAGE_SUBMIT&amp;#39;
#335: &amp;#39;PAGE_OUTPUT_IMAGE_BUTTON&amp;#39;
#368: &amp;#39;NOTIFY_ZEN_DRAW_BUTTON&amp;#39;, null, $text, $classes, $added_classes, $id, $parameters, $title, $type, $the_button
#447:  &amp;#39;NOTIFY_ZEN_CSS_BUTTON_SUBMIT&amp;#39;, array( &amp;#39;button_name&amp;#39; =&amp;gt; $button_name, &amp;#39;text&amp;#39; =&amp;gt; $text, &amp;#39;sec_class&amp;#39; =&amp;gt; $sec_class, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, ), $css_button 
#468:  &amp;#39;NOTIFY_ZEN_CSS_BUTTON_BUTTON&amp;#39;, array( &amp;#39;button_name&amp;#39; =&amp;gt; $button_name, &amp;#39;text&amp;#39; =&amp;gt; $text, &amp;#39;sec_class&amp;#39; =&amp;gt; $sec_class, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, ), $css_button 
#574:  &amp;#39;NOTIFY_ZEN_DRAW_INPUT_FIELD_OVERRIDE&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;value&amp;#39; =&amp;gt; $value, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;type&amp;#39; =&amp;gt; $type, &amp;#39;reinsert_value&amp;#39; =&amp;gt; $reinsert_value, &amp;#39;required&amp;#39; =&amp;gt; $required, ), $field 
#604:  &amp;#39;NOTIFY_ZEN_DRAW_INPUT_FIELD&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;value&amp;#39; =&amp;gt; $value, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;type&amp;#39; =&amp;gt; $type, &amp;#39;reinsert_value&amp;#39; =&amp;gt; $reinsert_value, &amp;#39;required&amp;#39; =&amp;gt; $required, ), $field 
#641:  &amp;#39;NOTIFY_ZEN_DRAW_SELECTION_FIELD_OVERRIDE&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;value&amp;#39; =&amp;gt; $value, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;type&amp;#39; =&amp;gt; $type, &amp;#39;checked&amp;#39; =&amp;gt; $checked ), $selection 
#676:  &amp;#39;NOTIFY_ZEN_DRAW_SELECTION_FIELD&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;value&amp;#39; =&amp;gt; $value, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;type&amp;#39; =&amp;gt; $type, &amp;#39;checked&amp;#39; =&amp;gt; $checked ), $selection 
#715:  &amp;#39;NOTIFY_ZEN_DRAW_TEXTAREA_FIELD_OVERRIDE&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;width&amp;#39; =&amp;gt; $width, &amp;#39;height&amp;#39; =&amp;gt; $height, &amp;#39;text&amp;#39; =&amp;gt; $text, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;reinsert_value&amp;#39; =&amp;gt; $reinsert_value, ), $field 
#748:  &amp;#39;NOTIFY_ZEN_DRAW_TEXTAREA_FIELD&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;width&amp;#39; =&amp;gt; $width, &amp;#39;height&amp;#39; =&amp;gt; $height, &amp;#39;text&amp;#39; =&amp;gt; $text, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;reinsert_value&amp;#39; =&amp;gt; $reinsert_value, ), $field 
#830:  &amp;#39;NOTIFY_ZEN_DRAW_PULL_DOWN_MENU_OVERRIDE&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;values&amp;#39; =&amp;gt; $values, &amp;#39;default&amp;#39; =&amp;gt; $default, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;required&amp;#39; =&amp;gt; $required, ), $field 
#879:  &amp;#39;NOTIFY_ZEN_DRAW_PULL_DOWN_MENU&amp;#39;, array( &amp;#39;name&amp;#39; =&amp;gt; $name, &amp;#39;values&amp;#39; =&amp;gt; $values, &amp;#39;default&amp;#39; =&amp;gt; $default, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;required&amp;#39; =&amp;gt; $required, ), $field 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_categoriesphp&#34;&gt;includes/functions/functions_categories.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#819: &amp;#39;NOTIFY_GET_CATEGORY_DESCRIPTION&amp;#39;, $category_id, $category-&amp;gt;fields[&amp;#39;categories_description&amp;#39;]
#1157: &amp;#39;NOTIFIER_ADMIN_ZEN_REMOVE_CATEGORY&amp;#39;, [], $category_id
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_product_imagesphp&#34;&gt;includes/functions/functions_product_images.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#68:  &amp;#39;NOTIFY_MODULES_ADDITIONAL_IMAGES_FILE_MATCH&amp;#39;, [ &amp;#39;file&amp;#39; =&amp;gt; $file, &amp;#39;file_extension&amp;#39; =&amp;gt; $file_extension, &amp;#39;products_image&amp;#39; =&amp;gt; $products_image, &amp;#39;products_image_base&amp;#39; =&amp;gt; $products_image_base, ], $current_image_match 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_productsphp&#34;&gt;includes/functions/functions_products.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#63: &amp;#39;NOTIFY_PRODUCT_INFO_PRODUCT_STATUS_CHECK&amp;#39;, $product_info, $product_status, $should_throw_404, $response_code, $use_custom_response_code
#508:  &amp;#39;ZEN_GET_PRODUCTS_STOCK&amp;#39;, $products_id, $products_quantity, $quantity_handled 
#539:  &amp;#39;ZEN_CHECK_STOCK_MESSAGE&amp;#39;, [ $products_id, $products_quantity ], $out_of_stock_message 
#612: &amp;#39;NOTIFY_GET_PRODUCTS_DESCRIPTION&amp;#39;, $product_id, $data
#823: &amp;#39;NOTIFIER_ADMIN_ZEN_REMOVE_PRODUCT&amp;#39;, [], $product_id, $ptc
#941: &amp;#39;NOTIFIER_ADMIN_ZEN_PRODUCTS_ATTRIBUTES_DOWNLOAD_DELETE&amp;#39;, [], $product_id
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_searchphp&#34;&gt;includes/functions/functions_search.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#168: &amp;#39;NOTIFY_BUILD_KEYWORD_SEARCH&amp;#39;, &amp;#39;&amp;#39;, $fields, $string
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_urlsphp&#34;&gt;includes/functions/functions_urls.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#24: &amp;#39;NOTIFY_ZEN_REDIRECT&amp;#39;, [&amp;#39;url&amp;#39; =&amp;gt; $url, &amp;#39;httpResponseCode&amp;#39; =&amp;gt; $httpResponseCode], $request_handled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_pricesphp&#34;&gt;includes/functions/functions_prices.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#64: &amp;#39;NOTIFY_ZEN_GET_PRODUCTS_SPECIAL_PRICE&amp;#39;, $product-&amp;gt;fields, $sale, $product_price
#204:  &amp;#39;NOTIFY_ZEN_GET_PRODUCTS_DISPLAY_PRICE_SALE&amp;#39;, [ &amp;#39;products_id&amp;#39; =&amp;gt; $product_id, &amp;#39;display_sale_price&amp;#39; =&amp;gt; $display_sale_price, &amp;#39;display_special_price&amp;#39; =&amp;gt; $display_special_price, &amp;#39;display_normal_price&amp;#39; =&amp;gt; $display_normal_price, &amp;#39;products_tax_class_id&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;products_tax_class_id&amp;#39;] ], $pricing_handled, $show_sale_discount 
#266:  &amp;#39;NOTIFY_ZEN_GET_PRODUCTS_DISPLAY_PRICE_SPECIAL&amp;#39;, [ &amp;#39;products_id&amp;#39; =&amp;gt; $product_id, &amp;#39;display_sale_price&amp;#39; =&amp;gt; $display_sale_price, &amp;#39;display_special_price&amp;#39; =&amp;gt; $display_special_price, &amp;#39;display_normal_price&amp;#39; =&amp;gt; $display_normal_price, &amp;#39;products_tax_class_id&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;products_tax_class_id&amp;#39;], &amp;#39;product_is_free&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;product_is_free&amp;#39;] ], $pricing_handled, $show_normal_price, $show_special_price, $show_sale_price 
#334:  &amp;#39;NOTIFY_ZEN_GET_PRODUCTS_DISPLAY_PRICE_NORMAL&amp;#39;, [ &amp;#39;products_id&amp;#39; =&amp;gt; $product_id, &amp;#39;display_sale_price&amp;#39; =&amp;gt; $display_sale_price, &amp;#39;display_special_price&amp;#39; =&amp;gt; $display_special_price, &amp;#39;display_normal_price&amp;#39; =&amp;gt; $display_normal_price, &amp;#39;products_tax_class_id&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;products_tax_class_id&amp;#39;], &amp;#39;product_is_free&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;product_is_free&amp;#39;], &amp;#39;display_wholesale_price&amp;#39; =&amp;gt; $display_wholesale_price, &amp;#39;has_wholesale_price&amp;#39; =&amp;gt; $has_wholesale_price, ], $pricing_handled, $show_normal_price, $show_special_price, $show_sale_price 
#407:  &amp;#39;NOTIFY_ZEN_GET_PRODUCTS_DISPLAY_PRICE_FREE_OR_CALL&amp;#39;, [ &amp;#39;product_is_free&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;product_is_free&amp;#39;], &amp;#39;product_is_call&amp;#39; =&amp;gt; $product_check-&amp;gt;fields[&amp;#39;product_is_call&amp;#39;], &amp;#39;product_id&amp;#39; =&amp;gt; $product_id, ], $tags_handled, $free_tag, $call_tag 
#458: &amp;#39;ZEN_GET_PRODUCTS_BASE_PRICE&amp;#39;, $product_id, $products_base_price, $base_price_is_handled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_trafficphp&#34;&gt;includes/functions/functions_traffic.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#51: &amp;#39;NOTIFY_ZEN_ADMIN_INVALID_IP_DETECTED&amp;#39;, $original_ip
#53: &amp;#39;NOTIFY_ZEN_INVALID_IP_DETECTED&amp;#39;, $original_ip
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_exchange_ratesphp&#34;&gt;includes/functions/functions_exchange_rates.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#47: &amp;#39;ADMIN_CURRENCY_EXCHANGE_RATE_MULTIPLIER&amp;#39;, $result[&amp;#39;code&amp;#39;], $multiplier, $rate
#59: &amp;#39;ADMIN_CURRENCY_EXCHANGE_RATE_SINGLE&amp;#39;, $result[&amp;#39;code&amp;#39;], $rate
#86: &amp;#39;ADMIN_CURRENCY_EXCHANGE_RATES_UPDATED&amp;#39;, $msg
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_osh_updatephp&#34;&gt;includes/functions/functions_osh_update.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#72: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_PRE_EMAIL&amp;#39;, [&amp;#39;message&amp;#39; =&amp;gt; $message], $osh_additional_comments
#90: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_STATUS_VALUES&amp;#39;, [&amp;#39;orders_id&amp;#39; =&amp;gt; $orders_id, &amp;#39;new&amp;#39; =&amp;gt; $orders_new_status, &amp;#39;old&amp;#39; =&amp;gt; $orders_current_status]
#137: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_SET_ORDER_UPDATE_MESSAGE&amp;#39;, $orders_id, $email_order_message
#165: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_BEFORE_SENDING_CUSTOMER_EMAIL&amp;#39;, $orders_id, $email_subject, $email_text, $html_msg, $notify_customer
#206: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_BEFORE_INSERT&amp;#39;, [], $osh_sql
#211: &amp;#39;ZEN_UPDATE_ORDERS_HISTORY_AFTER_INSERT&amp;#39;, $osh_id, $osh_sql, $paypalLookup
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_addressesphp&#34;&gt;includes/functions/functions_addresses.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#339:  &amp;#39;NOTIFY_END_ZEN_ADDRESS_FORMAT&amp;#39;, [ &amp;#39;format&amp;#39; =&amp;gt; $fmt, &amp;#39;address&amp;#39; =&amp;gt; $incoming, &amp;#39;firstname&amp;#39; =&amp;gt; $address[&amp;#39;$firstname&amp;#39;], &amp;#39;lastname&amp;#39; =&amp;gt; $address[&amp;#39;$lastname&amp;#39;], &amp;#39;street&amp;#39; =&amp;gt; $address[&amp;#39;$street&amp;#39;], &amp;#39;suburb&amp;#39; =&amp;gt; $address[&amp;#39;$suburb&amp;#39;], &amp;#39;city&amp;#39; =&amp;gt; $address[&amp;#39;$city&amp;#39;], &amp;#39;state&amp;#39; =&amp;gt; $address[&amp;#39;$state&amp;#39;], &amp;#39;country&amp;#39; =&amp;gt; $address[&amp;#39;$country&amp;#39;], &amp;#39;postcode&amp;#39; =&amp;gt; $address[&amp;#39;$postcode&amp;#39;], &amp;#39;company&amp;#39; =&amp;gt; $address[&amp;#39;$company&amp;#39;], &amp;#39;streets&amp;#39; =&amp;gt; $address[&amp;#39;$streets&amp;#39;], &amp;#39;statecomma&amp;#39; =&amp;gt; $address[&amp;#39;$statecomma&amp;#39;], &amp;#39;zip&amp;#39; =&amp;gt; $address[&amp;#39;$zip&amp;#39;], &amp;#39;cr&amp;#39; =&amp;gt; $address[&amp;#39;$cr&amp;#39;], &amp;#39;hr&amp;#39; =&amp;gt; $address[&amp;#39;$hr&amp;#39;], ], $address_out 
#389: &amp;#39;NOTIFY_ZEN_ADDRESS_LABEL&amp;#39;, null, $customers_id, $address_id, $address-&amp;gt;fields
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_customersphp&#34;&gt;includes/functions/functions_customers.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#170: &amp;#39;NOTIFY_ZEN_IN_GUEST_CHECKOUT&amp;#39;, null, $in_guest_checkout
#183: &amp;#39;NOTIFY_ZEN_IS_LOGGED_IN&amp;#39;, null, $is_logged_in
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_generalphp&#34;&gt;includes/functions/functions_general.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#203: &amp;#39;NOTIFY_ZEN_SOLD_OUT_IMAGE&amp;#39;, array_merge($button_check-&amp;gt;fields, [&amp;#39;products_id&amp;#39; =&amp;gt; (int)$product_id]), $return_button
#214: &amp;#39;NOTIFY_ZEN_GET_BUY_NOW_BUTTON_RETURN&amp;#39;, array_merge($button_check-&amp;gt;fields, [&amp;#39;products_id&amp;#39; =&amp;gt; (int)$product_id]), $return_button
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_attributesphp&#34;&gt;includes/functions/functions_attributes.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#30: &amp;#39;NOTIFY_GET_ATTRIBUTE_DETAILS_BY_ID&amp;#39;, [$attributes_id], $result
#62: &amp;#39;NOTIFY_GET_ATTRIBUTE_DETAILS&amp;#39;, [$products_id, $options_id, $options_values_id], $result
#85: &amp;#39;NOTIFY_ZEN_HAS_PRODUCT_ATTRIBUTES_CHECK&amp;#39;, [&amp;#39;products_id&amp;#39; =&amp;gt; $product_id, &amp;#39;not_readonly&amp;#39; =&amp;gt; $not_readonly], $has_attributes
#137: &amp;#39;NOTIFY_FUNCTIONS_LOOKUPS_REQUIRES_ATTRIBUTES_SELECTION_OTHER&amp;#39;, [&amp;#39;products_id&amp;#39; =&amp;gt; $products_id], $has_attributes
#165: &amp;#39;NOTIFY_FUNCTIONS_LOOKUPS_REQUIRES_ATTRIBUTES_SELECTION&amp;#39;, &amp;#39;&amp;#39;, $query, $noSingles, $noDoubles
#227: &amp;#39;FUNCTIONS_LOOKUPS_OPTION_NAME_NO_VALUES_OPT_TYPE&amp;#39;, $opt_type, $test_var
#250: &amp;#39;NOTIFY_ZEN_HAS_PRODUCT_ATTRIBUTES_VALUES&amp;#39;, $product_id, $value_to_return
#508: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_START&amp;#39;, [&amp;#39;from&amp;#39; =&amp;gt; $products_id_from, &amp;#39;to&amp;#39; =&amp;gt; $products_id_to]
#520: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_DELETE&amp;#39;, $products_id_to
#588: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_ADD&amp;#39;, [&amp;#39;pID&amp;#39; =&amp;gt; $products_id_to, &amp;#39;fields&amp;#39; =&amp;gt; $copy_from]
#606: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_ADDED_DOWNLOAD&amp;#39;, $products_id_to, $new_products_attributes_id, $new_attribute_id
#647: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_UPDATE&amp;#39;, [&amp;#39;pID&amp;#39; =&amp;gt; $products_id_to, &amp;#39;fields&amp;#39; =&amp;gt; $copy_from]
#652: &amp;#39;ZEN_COPY_PRODUCTS_ATTRIBUTES_COMPLETE&amp;#39;, [&amp;#39;from&amp;#39; =&amp;gt; $products_id_from, &amp;#39;to&amp;#39; =&amp;gt; $products_id_to]
#696: &amp;#39;NOTIFIER_ADMIN_ZEN_DELETE_PRODUCTS_ATTRIBUTES&amp;#39;, [], $product_id
#813: &amp;#39;NOTIFY_TEST_DOWNLOADABLE_FILE_EXISTS&amp;#39;, $check_filename, $handler
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_taxesphp&#34;&gt;includes/functions/functions_taxes.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#31:  &amp;#39;NOTIFY_ZEN_GET_TAX_RATE_OVERRIDE&amp;#39;, [ &amp;#39;class_id&amp;#39; =&amp;gt; $class_id, &amp;#39;country_id&amp;#39; =&amp;gt; $country_id, &amp;#39;zone_id&amp;#39; =&amp;gt; $zone_id ], $tax_rate 
#99:  &amp;#39;NOTIFY_ZEN_GET_TAX_DESCRIPTION_OVERRIDE&amp;#39;, [ &amp;#39;class_id&amp;#39; =&amp;gt; $class_id, &amp;#39;country_id&amp;#39; =&amp;gt; $country_id, &amp;#39;zone_id&amp;#39; =&amp;gt; $zone_id ], $tax_description 
#167:  &amp;#39;NOTIFY_ZEN_GET_MULTIPLE_TAX_RATES_OVERRIDE&amp;#39;, [ &amp;#39;class_id&amp;#39; =&amp;gt; $class_id, &amp;#39;country_id&amp;#39; =&amp;gt; $country_id, &amp;#39;zone_id&amp;#39; =&amp;gt; $zone_id, &amp;#39;tax_description&amp;#39; =&amp;gt; $tax_description ], $rates_array 
#375:  &amp;#39;ZEN_GET_TAX_LOCATIONS&amp;#39;, [ &amp;#39;country&amp;#39; =&amp;gt; $store_country, &amp;#39;zone&amp;#39; =&amp;gt; $store_zone ], $tax_address 
#449:  &amp;#39;NOTIFY_ZEN_GET_ALL_TAX_DESCRIPTIONS_OVERRIDE&amp;#39;, [ &amp;#39;country_id&amp;#39; =&amp;gt; $country_id, &amp;#39;zone_id&amp;#39; =&amp;gt; $zone_id ], $tax_descriptions 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesfunctionsfunctions_emailphp&#34;&gt;includes/functions/functions_email.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#108: &amp;#39;NOTIFY_EMAIL_ADDRESS_TEST&amp;#39;, [], $to_name, $to_email_address, $email_subject
#111: &amp;#39;NOTIFY_EMAIL_ADDRESS_VALIDATION_FAILURE&amp;#39;, sprintf(EMAIL_SEND_FAILED . &amp;#39; (failed validation)&amp;#39;, $to_name, $to_email_address, $email_subject)
#224: &amp;#39;NOTIFY_EMAIL_DETERMINING_EMAIL_FORMAT&amp;#39;, $to_email_address, $customers_email_format, $module
#246: &amp;#39;NOTIFY_EMAIL_AFTER_EMAIL_FORMAT_DETERMINED&amp;#39;
#410: &amp;#39;NOTIFY_EMAIL_BEFORE_PROCESS_ATTACHMENTS&amp;#39;, [&amp;#39;attachments&amp;#39; =&amp;gt; $attachments_list, &amp;#39;module&amp;#39; =&amp;gt; $module], $mail, $attachments_list
#442: &amp;#39;NOTIFY_EMAIL_AFTER_PROCESS_ATTACHMENTS&amp;#39;, count($attachments_list)
#487: &amp;#39;NOTIFY_EMAIL_READY_TO_SEND&amp;#39;, [$mail], $mail
#509: &amp;#39;NOTIFY_EMAIL_AFTER_SEND&amp;#39;
#514: &amp;#39;NOTIFY_EMAIL_AFTER_SEND_WITH_ALL_PARAMS&amp;#39;, [$to_name, $to_email_address, $from_email_name, $from_email_address, $email_subject, $email_html, $text, $module, $ErrorInfo]
#540: &amp;#39;NOTIFY_EMAIL_AFTER_SEND_ALL_SPECIFIED_ADDRESSES&amp;#39;
#565: &amp;#39;NOTIFY_EMAIL_BEGIN_ARCHIVE_WRITE&amp;#39;, [$to_name, $to_email_address, $from_email_name, $from_email_address, $email_subject, $email_html, $email_text, $module, $error_msgs]
#930: &amp;#39;NOTIFY_EMAIL_VALIDATION_TEST&amp;#39;, [$email, $valid_address]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommontpl_columnar_displayphp&#34;&gt;includes/templates/responsive_classic/common/tpl_columnar_display.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_TPL_COLUMNAR_DISPLAY_START&amp;#39;, $current_page_base, $list_box_contents, $title
#64: &amp;lt;?php &amp;#39;NOTIFY_TPL_COLUMNAR_DISPLAY_END&amp;#39;, $current_page_base, $list_box_contents, $title
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommonmain_template_varsphp&#34;&gt;includes/templates/responsive_classic/common/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#20: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START&amp;#39;, $template_dir
#48: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END&amp;#39;, $template_dir, $body_code
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommonhtml_headerphp&#34;&gt;includes/templates/responsive_classic/common/html_header.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_HTML_HEAD_START&amp;#39;, $current_page_base, $template_dir
#52: &amp;#39;NOTIFY_HTML_HEAD_TAG_START&amp;#39;, $current_page_base
#85: &amp;#39;NOTIFY_HTML_HEAD_CSS_BEGIN&amp;#39;, $current_page_base
#101: &amp;#39;NOTIFY_HTML_HEAD_JS_BEGIN&amp;#39;, $current_page_base
#141: &amp;#39;NOTIFY_HTML_HEAD_END&amp;#39;, $current_page_base
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommontpl_main_pagephp&#34;&gt;includes/templates/responsive_classic/common/tpl_main_page.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#95: &amp;#39;NOTIFY_PAGE_BODY_BEGIN&amp;#39;, $current_page
#269: &amp;#39;NOTIFY_FOOTER_END&amp;#39;, $current_page
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommontpl_tabular_displayphp&#34;&gt;includes/templates/responsive_classic/common/tpl_tabular_display.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_TPL_TABULAR_DISPLAY_START&amp;#39;, $current_page_base, $list_box_contents
#49: &amp;#39;NOTIFY_TPL_TABULAR_DISPLAY_END&amp;#39;, $current_page_base, $list_box_contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classiccommontpl_footerphp&#34;&gt;includes/templates/responsive_classic/common/tpl_footer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#39: &amp;#39;NOTIFY_FOOTER_AFTER_NAVSUPP&amp;#39;, []
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatesresponsive_classictemplatestpl_product_info_display_detailsphp&#34;&gt;includes/templates/responsive_classic/templates/tpl_product_info_display_details.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#18: &amp;#39;NOTIFY_PRODUCT_INFO_DISPLAY_DETAILS&amp;#39;, [], $additional_details
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommontpl_columnar_displayphp&#34;&gt;includes/templates/template_default/common/tpl_columnar_display.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_TPL_COLUMNAR_DISPLAY_START&amp;#39;, $current_page_base, $list_box_contents, $title
#65: &amp;lt;?php &amp;#39;NOTIFY_TPL_COLUMNAR_DISPLAY_END&amp;#39;, $current_page_base, $list_box_contents, $title
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommonmain_template_varsphp&#34;&gt;includes/templates/template_default/common/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#20: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START&amp;#39;, $template_dir
#41: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END&amp;#39;, $template_dir, $body_code
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommonhtml_headerphp&#34;&gt;includes/templates/template_default/common/html_header.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_HTML_HEAD_START&amp;#39;, $current_page_base, $template_dir
#37: &amp;#39;NOTIFY_HTML_HEAD_TAG_START&amp;#39;, $current_page_base
#69: &amp;#39;NOTIFY_HTML_HEAD_CSS_BEGIN&amp;#39;, $current_page_base
#81: &amp;#39;NOTIFY_HTML_HEAD_JS_BEGIN&amp;#39;, $current_page_base
#88: &amp;#39;NOTIFY_HTML_HEAD_END&amp;#39;, $current_page_base
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommontpl_main_pagephp&#34;&gt;includes/templates/template_default/common/tpl_main_page.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#71: &amp;#39;NOTIFY_PAGE_BODY_BEGIN&amp;#39;, $current_page
#205: &amp;#39;NOTIFY_FOOTER_END&amp;#39;, $current_page
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommontpl_tabular_displayphp&#34;&gt;includes/templates/template_default/common/tpl_tabular_display.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_TPL_TABULAR_DISPLAY_START&amp;#39;, $current_page_base, $list_box_contents
#50: &amp;#39;NOTIFY_TPL_TABULAR_DISPLAY_END&amp;#39;, $current_page_base, $list_box_contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaultcommontpl_footerphp&#34;&gt;includes/templates/template_default/common/tpl_footer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#41: &amp;#39;NOTIFY_FOOTER_AFTER_NAVSUPP&amp;#39;, []
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaulttemplatestpl_product_info_display_detailsphp&#34;&gt;includes/templates/template_default/templates/tpl_product_info_display_details.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#18: &amp;#39;NOTIFY_PRODUCT_INFO_DISPLAY_DETAILS&amp;#39;, [], $additional_details
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includestemplatestemplate_defaulttemplatestpl_account_history_info_defaultphp&#34;&gt;includes/templates/template_default/templates/tpl_account_history_info_default.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#21: &amp;#39;NOTIFY_ACCOUNT_HISTORY_INFO_EXTRA_COLUMN_HEADING&amp;#39;, $order, $extra_headings
#49: &amp;#39;NOTIFY_ACCOUNT_HISTORY_INFO_EXTRA_COLUMN_DATA&amp;#39;, [ &amp;#39;order&amp;#39; =&amp;gt; $order, &amp;#39;orders_product&amp;#39; =&amp;gt; $op ], $extra_data
#116: &amp;#39;NOTIFY_INVOICE_ADDITIONAL_DATA_MIDDLE&amp;#39;, $order, $additional_content
#139: &amp;#39;NOTIFY_ACCOUNT_HISTORY_INFO_OSH_HEADINGS&amp;#39;, $order, $extra_headings
#161: &amp;#39;NOTIFY_ACCOUNT_HISTORY_INFO_OSH_DATA&amp;#39;, $statuses, $extra_data
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesfeatured_productsphp&#34;&gt;includes/modules/featured_products.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#75: &amp;#39;NOTIFY_MODULES_FEATURED_PRODUCTS_B4_LIST_BOX&amp;#39;, [], $data, $products_price
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesmain_product_imagephp&#34;&gt;includes/modules/main_product_image.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_MODULES_MAIN_PRODUCT_IMAGE_START&amp;#39;
#38:  &amp;#39;NOTIFY_MODULES_MAIN_PRODUCT_IMAGE_FILENAME&amp;#39;, $products_image, $main_image_handled, $products_image_extension, $products_image_base, $products_image_medium, $products_image_large 
#75: &amp;#39;NOTIFY_MODULES_MAIN_PRODUCT_IMAGE_END&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesspecials_indexphp&#34;&gt;includes/modules/specials_index.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#79: &amp;#39;NOTIFY_MODULES_SPECIALS_INDEX_B4_LIST_BOX&amp;#39;, [], $data, $products_price
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesresponsive_classicezpages_bar_headerphp&#34;&gt;includes/modules/responsive_classic/ezpages_bar_header.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_START_EZPAGES_HEADERBAR&amp;#39;
#70: &amp;#39;NOTIFY_END_EZPAGES_HEADERBAR&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesresponsive_classicproduct_listingphp&#34;&gt;includes/modules/responsive_classic/product_listing.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#38: &amp;#39;NOTIFY_MODULE_PRODUCT_LISTING_RESULTCOUNT&amp;#39;, $listing_split-&amp;gt;number_of_rows
#285: &amp;#39;NOTIFY_MODULES_PRODUCT_LISTING_PRODUCTS_BUTTON&amp;#39;, [], $record, $lc_button
#441: &amp;#39;NOTIFY_PRODUCT_LISTING_END&amp;#39;, $current_page_base, $list_box_contents, $listing_split, $show_top_submit_button, $show_bottom_submit_button, $show_submit, $how_many
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmoduleshreflangphp&#34;&gt;includes/modules/hreflang.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#25: &amp;#39;NOTIFY_MODULE_START_HREFLANG&amp;#39;, $current_page_base, $bypass, $lng, $languages, $canonicalLink
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesezpages_mobilephp&#34;&gt;includes/modules/ezpages_mobile.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#13: &amp;#39;NOTIFY_START_EZPAGES_MOBILE&amp;#39;
#67: &amp;#39;NOTIFY_END_EZPAGES_FOOTERBAR&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescheckout_new_addressphp&#34;&gt;includes/modules/checkout_new_address.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_MODULE_START_CHECKOUT_NEW_ADDRESS&amp;#39;
#140: &amp;#39;NOTIFY_MODULE_CHECKOUT_NEW_ADDRESS_VALIDATION&amp;#39;, [], $error
#173: &amp;#39;NOTIFY_MODULE_CHECKOUT_ADDED_ADDRESS_BOOK_RECORD&amp;#39;, array_merge([&amp;#39;address_id&amp;#39; =&amp;gt; $address_book_id], $sql_data_array)
#272: &amp;#39;NOTIFY_MODULE_END_CHECKOUT_NEW_ADDRESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescategory_rowphp&#34;&gt;includes/modules/category_row.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#41: &amp;#39;NOTIFY_CATEGORY_ROW_IMAGE&amp;#39;, $next_category[&amp;#39;categories_id&amp;#39;], $next_category[&amp;#39;categories_image&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesmeta_tagsphp&#34;&gt;includes/modules/meta_tags.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_MODULE_START_META_TAGS&amp;#39;, $current_page_base, $metatag_page_name, $meta_tags_over_ride
#41: &amp;#39;NOTIFY_MODULE_META_TAGS_BUILDKEYWORDS&amp;#39;, CUSTOM_KEYWORDS, $keywords_string_metatags
#404: &amp;#39;NOTIFY_MODULE_META_TAGS_UNSPECIFIEDPAGE&amp;#39;, $current_page_base, $metatag_page_name, $meta_tags_over_ride, $metatags_title, $metatags_description, $metatags_keywords
#413: &amp;#39;NOTIFY_MODULE_META_TAGS_OVERRIDE&amp;#39;, $metatag_page_name, $meta_tags_over_ride, $metatags_title, $metatags_description, $metatags_keywords
#423: &amp;#39;NOTIFY_MODULE_END_META_TAGS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesattributesphp&#34;&gt;includes/modules/attributes.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#132: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_START_OPTION&amp;#39;, $next_option_name
#164: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_START_OPTIONS_LOOP&amp;#39;, $i++, $next_option, $next_option_name, $data_properties, $field_disabled, $attributeDetailsArrayForJson
#221: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_SALEMAKER_DISPLAY_PRICE_PERCENTAGE&amp;#39;, $next_option, $product_data, $products_options_display_price, $data_properties
#247: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_ORIGINAL_PRICE&amp;#39;, $next_option, $products_options_array, $products_options_display_price, $data_properties
#321: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_RADIO_SELECTED&amp;#39;, $next_option, $data_properties
#465: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_CHECKBOX_SELECTED&amp;#39;, $next_option, $data_properties
#670: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_FORMAT_VALUE&amp;#39;, array_merge($next_option, $next_option_name), $data_properties, $field_disabled, $attributeDetailsArrayForJson
#707: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_BEFORE_ASSEMBLE_OUTPUTS&amp;#39;, $next_option, $data_properties, $inputFieldId, $field_disabled
#783: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_DEFAULT_SWITCH&amp;#39;, $next_option_name, $options_name, $options_menu, $options_comment, $options_comment_position, $options_html_id, $data_properties, $options_inputfield_id
#790: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_OPTION_BUILT&amp;#39;, $next_option_name, $options_name, $options_menu, $options_comment, $options_comment_position, $options_html_id, $options_attributes_image, $data_properties, $options_inputfield_id
#793: &amp;#39;NOTIFY_ATTRIBUTES_MODULE_END&amp;#39;, $prod_id, $options_name, $options_menu, $options_comment, $options_comment_position, $options_html_id, $options_attributes_image, $options_inputfield_id, $attributeDetailsArrayForJson
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescreate_accountphp&#34;&gt;includes/modules/create_account.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_MODULE_START_CREATE_ACCOUNT&amp;#39;
#45: &amp;#39;NOTIFY_CREATE_ACCOUNT_CAPTCHA_CHECK&amp;#39;, $antiSpamFieldName, $antiSpam
#152: &amp;#39;NOTIFY_CREATE_ACCOUNT_LOOKUP_BY_EMAIL&amp;#39;, $email_address, $already_exists, $send_welcome_email
#159: &amp;#39;NOTIFY_NICK_CHECK_FOR_EXISTING_EMAIL&amp;#39;, $email_address, $nick_error, $nick
#167: &amp;#39;NOTIFY_NICK_CHECK_FOR_MIN_LENGTH&amp;#39;, $nick, $nick_error, $nick_length_min
#171: &amp;#39;NOTIFY_NICK_CHECK_FOR_DUPLICATE&amp;#39;, $nick, $nick_error
#262: &amp;#39;NOTIFY_CREATE_ACCOUNT_VALIDATION_CHECK&amp;#39;, [], $error, $send_welcome_email
#274: &amp;#39;NOTIFY_FAILURE_DURING_CREATE_ACCOUNT&amp;#39;
#276: &amp;#39;NOTIFY_SPAM_DETECTED_DURING_CREATE_ACCOUNT&amp;#39;
#301: &amp;#39;NOTIFY_NICK_CREATE_NEW&amp;#39;, $nick, $password, $nick_email, $extra_welcome_text
#325: &amp;#39;NOTIFY_NICK_SET_TEMPLATE_FLAG&amp;#39;, 0, $display_nick_field
#328: &amp;#39;NOTIFY_MODULE_END_CREATE_ACCOUNT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentauthorizenetphp&#34;&gt;includes/modules/payment/authorizenet.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#361: &amp;#39;NOTIFY_PAYMENT_AUTHNETSIM_PRESUBMIT_HOOK&amp;#39;
#435: &amp;#39;NOTIFY_PAYMENT_AUTHNETSIM_POSTSUBMIT_HOOK&amp;#39;, $this-&amp;gt;authorize
#475: &amp;#39;NOTIFY_PAYMENT_AUTHNETSIM_POSTPROCESS_HOOK&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentpaypaldpphp&#34;&gt;includes/modules/payment/paypaldp.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#1243: &amp;#39;NOTIFY_PAYMENT_PAYPALDP_INSTALLED&amp;#39;
#1270: &amp;#39;NOTIFY_PAYMENT_PAYPALDP_UNINSTALLED&amp;#39;
#1669: &amp;#39;NOTIFY_PAYMENT_PAYPALDP_SUBTOTALS_REVIEW&amp;#39;, $order, $order_totals
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentpaypalwppphp&#34;&gt;includes/modules/payment/paypalwpp.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#478: &amp;#39;NOTIFY_PAYPALWPP_BEFORE_DOEXPRESSCHECKOUT&amp;#39;
#535: &amp;#39;NOTIFY_PAYPALWPP_BEFORE_PROCESS_FINISHED&amp;#39;, $response
#604: &amp;#39;NOTIFY_PAYPALWPP_AFTER_PROCESS_FINISHED&amp;#39;, $paypal_order
#762: &amp;#39;NOTIFY_PAYMENT_PAYPALWPP_INSTALLED&amp;#39;
#809: &amp;#39;NOTIFY_PAYMENT_PAYPALWPP_UNINSTALLED&amp;#39;
#1363: &amp;#39;NOTIFY_PAYMENT_PAYPALEC_SUBTOTALS_TAX&amp;#39;, $order, $order_totals
#1456: &amp;#39;NOTIFY_PAYPALWPP_GETLINEITEMDETAILS&amp;#39;, $numberOfLineItemsProcessed, $optionsLI
#1807: &amp;#39;NOTIFY_PAYMENT_PAYPALEC_BEFORE_SETEC&amp;#39;, array(), $options, $order, $order_totals
#1815: &amp;#39;NOTIFY_PAYMENT_PAYPALEC_TOKEN&amp;#39;, $response, $options
#1933: &amp;#39;NOTIFY_PAYPALEC_PARSE_GETEC_RESULT&amp;#39;, [], $response
#1991: &amp;#39;NOTIFY_PAYPAL_EXPRESS_CHECKOUT_PAYERID_DETERMINED&amp;#39;, $response[&amp;#39;PAYERID&amp;#39;]
#2152: &amp;#39;NOTIFY_PAYPAL_CUSTOMER_ATTEMPT_TO_USE_INVALID_COUNTRY_CODE&amp;#39;
#2299: &amp;#39;NOTIFY_PAYPALEXPRESS_BYPASS_ADDRESS_CREATION&amp;#39;, $paypal_ec_payer_info, $bypass_address_creation
#2410: &amp;#39;NOTIFY_PAYPALEXPRESS_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD&amp;#39;, $customer_id, $sql_data_array
#2441: &amp;#39;NOTIFY_PAYPALEXPRESS_CREATE_ACCOUNT_ADDED_ADDRESS_BOOK_RECORD&amp;#39;, array(), $address_id, $sql_data_array
#2494: &amp;#39;NOTIFY_LOGIN_SUCCESS_VIA_CREATE_ACCOUNT&amp;#39;, &amp;#39;paypal express checkout&amp;#39;
#2535: &amp;#39;NOTIFY_PAYPALEC_END_ECSTEP2&amp;#39;, $order
#2609: &amp;#39;NOTIFY_PAYPALWPP_DISABLE_GET_OVERRIDE_ADDRESS&amp;#39;, $address_id, $disable_address_override
#2872: &amp;#39;NOTIFY_HEADER_ADDRESS_BOOK_ADD_ENTRY_INVALID_ATTEMPT&amp;#39;, $customer_id, $country_id, $address_format_id, $address_question_arr
#2942: &amp;#39;NOTIFY_HEADER_ADDRESS_BOOK_ADD_ENTRY_DONE&amp;#39;, &amp;#39;paypal express checkout&amp;#39;, $new_address_book_id, $sql_data_array, $make_default
#3233: &amp;#39;NOTIFY_PAYPALWPP_ERROR_HANDLER&amp;#39;, $response, $operation, $basicError, $ignoreList, $errorInfo
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentmoneyorderphp&#34;&gt;includes/modules/payment/moneyorder.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#90: &amp;#39;NOTIFY_MONEYORDER_CONSTRUCTOR&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentpaypalpaypal_curlphp&#34;&gt;includes/modules/payment/paypal/paypal_curl.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#114: &amp;#39;NOTIFY_PAYPAL_CURL_CONSTRUCT&amp;#39;, $params
#162: &amp;#39;NOTIFY_PAYPAL_SETEXPRESSCHECKOUT&amp;#39;
#179: &amp;#39;NOTIFY_PAYPAL_GETEXPRESSCHECKOUTDETAILS&amp;#39;
#204: &amp;#39;NOTIFY_PAYPAL_DOEXPRESSCHECKOUTPAYMENT&amp;#39;
#248: &amp;#39;NOTIFY_PAYPAL_DODIRECTPAYMENT&amp;#39;
#581: &amp;#39;NOTIFY_PAYPAL_CURL_BUILDNAMEVALUELIST&amp;#39;, $string
#691: &amp;#39;PAYPAL_CURL_LOG&amp;#39;, $token, $tokenHash
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentauthorizenet_aimphp&#34;&gt;includes/modules/payment/authorizenet_aim.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#427: &amp;#39;NOTIFY_PAYMENT_AUTHNET_EMULATOR_CHECK&amp;#39;, $this-&amp;gt;code, $submit_data
#442: &amp;#39;NOTIFY_PAYMENT_AUTHNET_PRESUBMIT_HOOK&amp;#39;, $this-&amp;gt;code, $submit_data
#448: &amp;#39;NOTIFY_PAYMENT_AUTHNET_POSTSUBMIT_HOOK&amp;#39;, $this-&amp;gt;code, $response
#641: &amp;#39;NOTIFY_PAYMENT_AUTHNET_MODE_SELECTION&amp;#39;, $this-&amp;gt;mode, $submit_data
#720: &amp;#39;NOTIFY_PAYMENT_AUTHNET_ENCAPSULATION_CHECK&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespaymentpaypalphp&#34;&gt;includes/modules/payment/paypal.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#412: &amp;#39;NOTIFY_PAYMENT_PAYPAL_RETURN_TO_STORE&amp;#39;, $_GET
#437: &amp;#39;NOTIFY_PAYMENT_PAYPAL_CANCELLED_DURING_CHECKOUT&amp;#39;, $_GET
#593: &amp;#39;NOTIFY_PAYMENT_PAYPAL_INSTALLED&amp;#39;
#603: &amp;#39;NOTIFY_PAYMENT_PAYPAL_UNINSTALLED&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesdownloadsphp&#34;&gt;includes/modules/downloads.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#107: &amp;#39;NOTIFY_MODULE_DOWNLOAD_TEMPLATE_DETAILS&amp;#39;, $data, $data
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescreate_account_send_emailphp&#34;&gt;includes/modules/create_account_send_email.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#38: &amp;#39;NOTIFY_LOGIN_SUCCESS_VIA_CREATE_ACCOUNT&amp;#39;, $email_address, $extra_welcome_text, $send_welcome_email
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingzonesphp&#34;&gt;includes/modules/shipping/zones.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#171: &amp;#39;NOTIFY_SHIPPING_ZONES_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingflatphp&#34;&gt;includes/modules/shipping/flat.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#53: &amp;#39;NOTIFY_SHIPPING_FLAT_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingstorepickupphp&#34;&gt;includes/modules/shipping/storepickup.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#67: &amp;#39;NOTIFY_SHIPPING_STOREPICKUP_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingfreeoptionsphp&#34;&gt;includes/modules/shipping/freeoptions.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#145: &amp;#39;NOTIFY_SHIPPING_FREEOPTIONS_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingfreeshipperphp&#34;&gt;includes/modules/shipping/freeshipper.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#51: &amp;#39;NOTIFY_SHIPPING_FREESHIPPER_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingitemphp&#34;&gt;includes/modules/shipping/item.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#53: &amp;#39;NOTIFY_SHIPPING_ITEM_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingperweightunitphp&#34;&gt;includes/modules/shipping/perweightunit.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#70: &amp;#39;NOTIFY_SHIPPING_PERWEIGHTUNIT_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesshippingtablephp&#34;&gt;includes/modules/shipping/table.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#69: &amp;#39;NOTIFY_SHIPPING_TABLE_UPDATE_STATUS&amp;#39;, [], $this-&amp;gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesproduct_listing_alpha_sorterphp&#34;&gt;includes/modules/product_listing_alpha_sorter.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#29: &amp;#39;NOTIFY_PRODUCT_LISTING_ALPHA_SORTER_SELECTLIST&amp;#39;, $prefix ?? &amp;#39;&amp;#39;, $letters_list
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesadditional_imagesphp&#34;&gt;includes/modules/additional_images.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#15: &amp;#39;NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_START&amp;#39;
#36: &amp;#39;NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_LIST&amp;#39;, null, $images_array
#66: &amp;#39;NOTIFY_MODULES_ADDITIONAL_IMAGES_GET_LARGE&amp;#39;, $products_name, $products_image_large
#81: &amp;#39;NOTIFY_MODULES_ADDITIONAL_IMAGES_THUMB_SLASHES&amp;#39;, [], $thumb_slashes
#99:  &amp;#39;NOTIFY_MODULES_ADDITIONAL_IMAGES_SCRIPT_LINK&amp;#39;, [ &amp;#39;flag_display_large&amp;#39; =&amp;gt; $flag_display_large, &amp;#39;products_name&amp;#39; =&amp;gt; $products_name, &amp;#39;products_image_large&amp;#39; =&amp;gt; $products_image_large, &amp;#39;thumb_slashes&amp;#39; =&amp;gt; $thumb_slashes, &amp;#39;large_link&amp;#39; =&amp;gt; $large_link, &amp;#39;index&amp;#39; =&amp;gt; $i, ], $script_link, $link_parameters 
#151: &amp;#39;NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_END&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescheckout_address_bookphp&#34;&gt;includes/modules/checkout_address_book.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#18: &amp;#39;NOTIFY_MODULE_END_CHECKOUT_ADDRESS_BOOK&amp;#39;, $customer, $addresses
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulessideboxesinformationphp&#34;&gt;includes/modules/sideboxes/information.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#79: &amp;#39;NOTIFY_INFORMATION_SIDEBOX_ADDITIONS&amp;#39;, [], $information
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulessideboxesezpagesphp&#34;&gt;includes/modules/sideboxes/ezpages.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_START_EZPAGES_SIDEBOX&amp;#39;
#68: &amp;#39;NOTIFY_EZPAGES_SIDEBOX_ADDITIONS&amp;#39;, [], $var_linksList
#72: &amp;#39;NOTIFY_END_EZPAGES_SIDEBOX&amp;#39;
#77: &amp;#39;NOTIFY_END_EZPAGES_SIDEBOX&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulessideboxesmore_informationphp&#34;&gt;includes/modules/sideboxes/more_information.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#31: &amp;#39;NOTIFY_MORE_INFORMATION_SIDEBOX_ADDITIONS&amp;#39;, [], $more_information
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesezpages_bar_headerphp&#34;&gt;includes/modules/ezpages_bar_header.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_START_EZPAGES_HEADERBAR&amp;#39;
#70: &amp;#39;NOTIFY_END_EZPAGES_HEADERBAR&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulescheckout_processphp&#34;&gt;includes/modules/checkout_process.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_CHECKOUT_PROCESS_BEGIN&amp;#39;
#31: &amp;#39;NOTIFY_CHECKOUT_SLAMMING_ALERT&amp;#39;, $_SESSION[&amp;#39;payment_attempt&amp;#39;], $slamming_threshold
#33: &amp;#39;NOTIFY_CHECKOUT_SLAMMING_LOCKOUT&amp;#39;
#85: &amp;#39;NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PRE_CONFIRMATION_CHECK&amp;#39;
#100: &amp;#39;NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PROCESS&amp;#39;
#102: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_TOTALS_PROCESS&amp;#39;
#117: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_BEFOREPROCESS&amp;#39;
#121: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&amp;#39;, $insert_id
#123: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&amp;#39;, $insert_id
#127: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS&amp;#39;, $insert_id, $order
#130: &amp;#39;NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL&amp;#39;, $insert_id, $order
#184: &amp;#39;NOTIFY_CHECKOUT_PROCESS_HANDLE_AFFILIATES&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesezpages_bar_footerphp&#34;&gt;includes/modules/ezpages_bar_footer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_START_EZPAGES_FOOTERBAR&amp;#39;
#69: &amp;#39;NOTIFY_END_EZPAGES_FOOTERBAR&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesproduct_listingphp&#34;&gt;includes/modules/product_listing.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#38: &amp;#39;NOTIFY_MODULE_PRODUCT_LISTING_RESULTCOUNT&amp;#39;, $listing_split-&amp;gt;number_of_rows
#278: &amp;#39;NOTIFY_MODULES_PRODUCT_LISTING_PRODUCTS_BUTTON&amp;#39;, [], $record, $lc_button
#427: &amp;#39;NOTIFY_PRODUCT_LISTING_END&amp;#39;, $current_page_base, $list_box_contents, $listing_split, $show_top_submit_button, $show_bottom_submit_button, $show_submit, $how_many
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesorder_totalot_shippingphp&#34;&gt;includes/modules/order_total/ot_shipping.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#102:  &amp;#39;NOTIFY_OT_SHIPPING_TAX_CALCS&amp;#39;, [], $external_shipping_tax_handler, $shipping_tax, $shipping_tax_description 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesorder_totalot_group_pricingphp&#34;&gt;includes/modules/order_total/ot_group_pricing.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#155: &amp;#39;NOTIFY_OT_GROUP_PRICING_DEDUCTION_OVERRIDE&amp;#39;, [&amp;#39;order_total&amp;#39; =&amp;gt; $order_total], $od_amount
#203:  &amp;#39;NOTIFY_OT_GROUP_PRICING_DEDUCTION_OVERRIDE_FINAL&amp;#39;, [ &amp;#39;customers_group_pricing&amp;#39; =&amp;gt; (int)$group_query-&amp;gt;fields[&amp;#39;customers_group_pricing&amp;#39;], &amp;#39;group_percentage&amp;#39; =&amp;gt; $group_discount-&amp;gt;fields[&amp;#39;group_percentage&amp;#39;], &amp;#39;orderTotal&amp;#39; =&amp;gt; $orderTotal, &amp;#39;gift_vouchers&amp;#39; =&amp;gt; $gift_vouchers, &amp;#39;tax_calc_method&amp;#39; =&amp;gt; $this-&amp;gt;calculate_tax, &amp;#39;order_info&amp;#39; =&amp;gt; $order-&amp;gt;info, ], $od_amount 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesorder_totalot_couponphp&#34;&gt;includes/modules/order_total/ot_coupon.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#104: &amp;#39;NOTIFY_OT_COUPON_START&amp;#39;, true, $valid
#225: &amp;#39;NOTIFY_OT_COUPON_CREDIT_SELECTION&amp;#39;, true, $valid
#275: &amp;#39;NOTIFY_OT_COUPON_GENERATE_POPUP_LINK&amp;#39;, [&amp;#39;coupon_id&amp;#39; =&amp;gt; $coupon_id, &amp;#39;coupon_code&amp;#39; =&amp;gt; $coupon_code], $couponLink
#383: &amp;#39;NOTIFY_OT_COUPON_COUPON_INFO&amp;#39;, [&amp;#39;coupon_result&amp;#39; =&amp;gt; $coupon_details, &amp;#39;code&amp;#39; =&amp;gt; $coupon_code]
#639: &amp;#39;NOTIFY_OT_COUPON_CALCS_FINISHED&amp;#39;, [&amp;#39;coupon&amp;#39; =&amp;gt; $coupon_details, &amp;#39;order_totals&amp;#39; =&amp;gt; $orderTotalDetails, &amp;#39;od_amount&amp;#39; =&amp;gt; $od_amount], $coupon_details
#670: &amp;#39;NOTIFY_OT_COUPON_PRODUCT_VALIDITY&amp;#39;, [&amp;#39;is_product_valid&amp;#39; =&amp;gt; $is_product_valid, &amp;#39;i&amp;#39; =&amp;gt; $i]
#720: &amp;#39;NOTIFY_OT_COUPON_ORDER_TOTAL_FINISHED&amp;#39;, null, $return
#822: &amp;#39;NOTIFY_OT_COUPON_COUPON_REMOVED&amp;#39;
#858: &amp;#39;NOTIFY_COUPON_VALIDATION_PRODUCT_RESTRICTIONS&amp;#39;, $coupon_id, $products, $found_valid
#1043: &amp;#39;NOTIFY_OT_COUPON_USES_PER_USER_CHECK&amp;#39;, $coupon_details, $valid
#1065: &amp;#39;NOTIFY_OT_COUPON_USES_PER_CUSTOMER_GUEST_CHECKOUT_CHECK&amp;#39;, $coupon_details, $valid
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesnew_productsphp&#34;&gt;includes/modules/new_products.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#83: &amp;#39;NOTIFY_MODULES_NEW_PRODUCTS_B4_LIST_BOX&amp;#39;, [], $new_products-&amp;gt;fields, $products_price
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespageheader_phpphp&#34;&gt;includes/modules/pages/page/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#19: &amp;#39;NOTIFY_HEADER_START_EZPAGE&amp;#39;
#141: &amp;#39;NOTIFY_HEADER_END_EZPAGE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_successheader_phpphp&#34;&gt;includes/modules/pages/checkout_success/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_SUCCESS&amp;#39;
#179: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_SUCCESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproducts_allheader_phpphp&#34;&gt;includes/modules/pages/products_all/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCTS_ALL&amp;#39;
#52: &amp;#39;NOTIFY_HEADER_END_PRODUCTS_ALL&amp;#39;, null
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescreate_account_successheader_phpphp&#34;&gt;includes/modules/pages/create_account_success/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CREATE_ACCOUNT_SUCCESS&amp;#39;
#64: &amp;#39;NOTIFY_HEADER_END_CREATE_ACCOUNT_SUCCESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_history_infoheader_phpphp&#34;&gt;includes/modules/pages/account_history_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_HISTORY_INFO&amp;#39;
#39: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_HISTORY_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_free_shipping_infomain_template_varsphp&#34;&gt;includes/modules/pages/product_free_shipping_info/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
#33: &amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;, (int)$_GET[&amp;#39;products_id&amp;#39;]
#108: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
#136: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
#144: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_free_shipping_infoheader_phpphp&#34;&gt;includes/modules/pages/product_free_shipping_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
#28: &amp;#39;NOTIFY_HEADER_END_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_free_shipping_infomain_template_vars_product_typephp&#34;&gt;includes/modules/pages/product_free_shipping_info/main_template_vars_product_type.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
#35: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_FREE_SHIPPING_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_historyheader_phpphp&#34;&gt;includes/modules/pages/account_history/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_HISTORY&amp;#39;
#28: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_HISTORY&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_paymentheader_phpphp&#34;&gt;includes/modules/pages/checkout_payment/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_PAYMENT&amp;#39;
#125: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_PAYMENT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_general_infomain_template_varsphp&#34;&gt;includes/modules/pages/document_general_info/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START_DOCUMENT_GENERAL_INFO&amp;#39;
#33: &amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;, (int)$_GET[&amp;#39;products_id&amp;#39;]
#108: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_DOCUMENT_GENERAL_INFO&amp;#39;
#137: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_DOCUMENT_GENERAL_INFO&amp;#39;
#145: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END_DOCUMENT_GENERAL_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_general_infoheader_phpphp&#34;&gt;includes/modules/pages/document_general_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_DOCUMENT_GENERAL_INFO&amp;#39;
#23: &amp;#39;NOTIFY_HEADER_END_DOCUMENT_GENERAL_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_general_infomain_template_vars_product_typephp&#34;&gt;includes/modules/pages/document_general_info/main_template_vars_product_type.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_START_DOCUMENT_GENERAL_INFO&amp;#39;
#35: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_END_DOCUMENT_GENERAL_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_confirmationheader_phpphp&#34;&gt;includes/modules/pages/checkout_confirmation/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_CONFIRMATION&amp;#39;
#174: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_CONFIRMATION&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_reviewsheader_phpphp&#34;&gt;includes/modules/pages/product_reviews/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCT_REVIEWS&amp;#39;
#91: &amp;#39;NOTIFY_HEADER_END_PRODUCT_REVIEWS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagessearch_resultheader_phpphp&#34;&gt;includes/modules/pages/search_result/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_HEADER_START_ADVANCED_SEARCH_RESULTS&amp;#39;
#49: &amp;#39;NOTIFY_SEARCH_RESULTS&amp;#39;, $listing_sql, $keywords, $result
#63: &amp;#39;NOTIFY_SEARCH_NO_RESULTS_MESSAGE&amp;#39;, $result, $search, $message
#85: &amp;#39;NOTIFY_HEADER_END_ADVANCED_SEARCH_RESULTS&amp;#39;, $keywords
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesbrandsheader_phpphp&#34;&gt;includes/modules/pages/brands/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_BRANDS&amp;#39;
#69: &amp;#39;NOTIFY_HEADER_END_BRANDS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescontact_usheader_phpphp&#34;&gt;includes/modules/pages/contact_us/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CONTACT_US&amp;#39;
#30: &amp;#39;NOTIFY_CONTACT_US_CAPTCHA_CHECK&amp;#39;, $_POST
#37: &amp;#39;NOTIFY_SPAM_DETECTED_USING_CONTACT_US&amp;#39;, $_POST
#57: &amp;#39;NOTIFY_CONTACT_US_ACTION&amp;#39;, $_SESSION[&amp;#39;customer_id&amp;#39;] ?? 0, $customer_email, $customer_name, $email_address, $name, $enquiry, $telephone
#158: &amp;#39;NOTIFY_HEADER_END_CONTACT_US&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesfeatured_productsheader_phpphp&#34;&gt;includes/modules/pages/featured_products/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_FEATURED_PRODUCTS&amp;#39;
#52: &amp;#39;NOTIFY_HEADER_END_FEATURED_PRODUCTS&amp;#39;, null
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesgv_sendheader_phpphp&#34;&gt;includes/modules/pages/gv_send/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_HEADER_START_GV_SEND&amp;#39;
#214: &amp;#39;NOTIFY_HEADER_END_GV_SEND&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesspecialsheader_phpphp&#34;&gt;includes/modules/pages/specials/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_SPECIALS&amp;#39;
#81: &amp;#39;NOTIFY_HEADER_END_SPECIALS&amp;#39;, null
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_shippingheader_phpphp&#34;&gt;includes/modules/pages/checkout_shipping/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_SHIPPING&amp;#39;
#229: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_SHIPPING&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesask_a_questionheader_phpphp&#34;&gt;includes/modules/pages/ask_a_question/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#9: &amp;#39;NOTIFY_HEADER_START_ASK_A_QUESTION&amp;#39;
#30: &amp;#39;NOTIFY_ASK_A_QUESTION_ALLOW_BYPASS_REDIRECT&amp;#39;, [&amp;#39;products_id&amp;#39; =&amp;gt; $pid, ], $bypass_redirect
#82: &amp;#39;NOTIFY_ASK_A_QUESTION_CAPTCHA_CHECK&amp;#39;, $_POST
#89: &amp;#39;NOTIFY_SPAM_DETECTED_USING_CONTACT_US&amp;#39;, $_POST
#109: &amp;#39;NOTIFY_ASK_A_QUESTION_ACTION&amp;#39;, (isset($_SESSION[&amp;#39;customer_id&amp;#39;]) ? $_SESSION[&amp;#39;customer_id&amp;#39;] : 0), $customer_email, $customer_name, $email_address, $name, $enquiry, $telephone
#206: &amp;#39;NOTIFY_HEADER_END_ASK_A_QUESTION&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespage_not_foundheader_phpphp&#34;&gt;includes/modules/pages/page_not_found/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PAGE_NOT_FOUND&amp;#39;
#27: &amp;#39;NOTIFY_HEADER_END_PAGE_NOT_FOUND&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespassword_forgottenheader_phpphp&#34;&gt;includes/modules/pages/password_forgotten/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#16: &amp;#39;NOTIFY_HEADER_START_PASSWORD_FORGOTTEN&amp;#39;
#66: &amp;#39;NOTIFY_PASSWORD_FORGOTTEN_ALREADY_SENT&amp;#39;, $check_token_sent, $sessionMessage, $continue_with_reset_email
#77: &amp;#39;NOTIFY_PASSWORD_FORGOTTEN_NOT_FOUND&amp;#39;, $email_address, $sessionMessage
#79: &amp;#39;NOTIFY_PASSWORD_FORGOTTEN_VALIDATED&amp;#39;, $email_address, $sessionMessage
#98: &amp;#39;NOTIFY_PASSWORD_RESET_URL_SENT&amp;#39;, $email_address, $check_customer[&amp;#39;customers_id&amp;#39;], $token
#110: &amp;#39;NOTIFY_HEADER_END_PASSWORD_FORGOTTEN&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesunsubscribeheader_phpphp&#34;&gt;includes/modules/pages/unsubscribe/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_UNSUBSCRIBE&amp;#39;
#60: &amp;#39;NOTIFY_HEADER_END_UNSUBSCRIBE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesorder_statusheader_phpphp&#34;&gt;includes/modules/pages/order_status/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#8: &amp;#39;NOTIFY_HEADER_START_ORDER_STATUS&amp;#39;
#77: &amp;#39;NOTIFY_ORDER_STATUS_SPAM_DETECTED&amp;#39;
#86: &amp;#39;NOTIFY_ORDER_STATUS_VALIDATION_CHECK&amp;#39;, &amp;#39;&amp;#39;, $error
#94: &amp;#39;NOTIFY_ORDER_STATUS_SLAMMING_ALERT&amp;#39;, $_SESSION[&amp;#39;os_errors&amp;#39;], $slamming_threshold
#96: &amp;#39;NOTIFY_ORDER_STATUS_SLAMMING_LOCKOUT&amp;#39;
#150: &amp;#39;NOTIFY_ORDER_STATUS_EXTRA_VALIDATION&amp;#39;, &amp;#39;&amp;#39;, $extra_validation_html
#155: &amp;#39;NOTIFY_HEADER_END_ORDER_STATUS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_newslettersheader_phpphp&#34;&gt;includes/modules/pages/account_newsletters/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_NEWSLETTERS&amp;#39;
#45: &amp;#39;NOTIFY_HEADER_ACCOUNT_NEWSLETTER_UPDATED&amp;#39;, $newsletter_general
#56: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_NEWSLETTERS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespopup_image_additionalheader_phpphp&#34;&gt;includes/modules/pages/popup_image_additional/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#13: &amp;#39;NOTIFY_HEADER_START_POPUP_IMAGES_ADDITIONAL&amp;#39;
#58: &amp;#39;NOTIFY_HEADER_END_POPUP_IMAGES_ADDITIONAL&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_product_infomain_template_varsphp&#34;&gt;includes/modules/pages/document_product_info/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START_DOCUMENT_PRODUCT_INFO&amp;#39;
#33: &amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;, (int)$_GET[&amp;#39;products_id&amp;#39;]
#109: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_DOCUMENT_PRODUCT_INFO&amp;#39;
#137: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_DOCUMENT_PRODUCT_INFO&amp;#39;
#145: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END_DOCUMENT_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_product_infoheader_phpphp&#34;&gt;includes/modules/pages/document_product_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_DOCUMENT_PRODUCT_INFO&amp;#39;
#28: &amp;#39;NOTIFY_HEADER_END_DOCUMENT_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdocument_product_infomain_template_vars_product_typephp&#34;&gt;includes/modules/pages/document_product_info/main_template_vars_product_type.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_START_DOCUMENT_PRODUCT_INFO&amp;#39;
#35: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_END_DOCUMENT_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesgv_redeemheader_phpphp&#34;&gt;includes/modules/pages/gv_redeem/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#15: &amp;#39;NOTIFY_HEADER_START_GV_REDEEM&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespopup_imageheader_phpphp&#34;&gt;includes/modules/pages/popup_image/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_HEADER_START_POPUP_IMAGES&amp;#39;
#73: &amp;#39;NOTIFY_HEADER_END_POPUP_IMAGES&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagestime_outheader_phpphp&#34;&gt;includes/modules/pages/time_out/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_LOGIN_TIMEOUT&amp;#39;
#18: &amp;#39;NOTIFY_HEADER_END_LOGIN_TIMEOUT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesdownloadheader_phpphp&#34;&gt;includes/modules/pages/download/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_HEADER_START_DOWNLOAD&amp;#39;
#54: &amp;#39;NOTIFY_DOWNLOAD_NO_MATCH_FOUND&amp;#39;, $sql
#88: &amp;#39;NOTIFY_CHECK_DOWNLOAD_HANDLER&amp;#39;, $downloads, $downloads-&amp;gt;fields, $origin_filename, $browser_filename, $source_directory, $file_exists, $service, $isExpired, $download_timestamp
#140: &amp;#39;NOTIFY_DOWNLOAD_BROWSER_DETECTION&amp;#39;, array(), $detectedBrowser, $_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;], $version, $browser_headers_override, $browser_extra_headers
#146: &amp;#39;NOTIFY_DOWNLOAD_BEFORE_START&amp;#39;, $_SESSION[&amp;#39;customers_host_address&amp;#39;], $service, $origin_filename, $browser_filename, $source_directory, $downloadFilesize, $mime_type, $downloads-&amp;gt;fields, $browser_headers_override
#147: &amp;#39;NOTIFY_DOWNLOAD_READY_TO_START&amp;#39;, $_SESSION[&amp;#39;customers_host_address&amp;#39;], $service, $origin_filename, $browser_filename, $source_directory, $downloadFilesize, $mime_type, $downloads-&amp;gt;fields, $browser_headers_override
#210: &amp;#39;NOTIFY_DOWNLOAD_READY_TO_REDIRECT&amp;#39;, array(), $service, $origin_filename, $browser_filename, $source_directory, $link_create_status
#214: &amp;#39;NOTIFY_DOWNLOAD_READY_TO_STREAM&amp;#39;, array(), $service, $origin_filename, $browser_filename, $source_directory, $downloadFilesize
#216: &amp;#39;NOTIFY_HEADER_END_DOWNLOAD&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_payment_addressheader_phpphp&#34;&gt;includes/modules/pages/checkout_payment_address/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_PAYMENT_ADDRESS&amp;#39;
#45: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_PAYMENT_ADDRESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_reviews_writeheader_phpphp&#34;&gt;includes/modules/pages/product_reviews_write/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_HEADER_START_PRODUCT_REVIEWS_WRITE&amp;#39;
#52: &amp;#39;NOTIFY_REVIEWS_WRITE_CAPTCHA_CHECK&amp;#39;
#66: &amp;#39;NOTIFY_SPAM_DETECTED_DURING_WRITE_REVIEW&amp;#39;
#87: &amp;#39;NOTIFY_REVIEW_INSERTED_DURING_WRITE_REVIEW&amp;#39;
#100: &amp;#39;NOTIFY_SEND_ADMIN_EMAIL_WRITE_REVIEW&amp;#39;
#112: &amp;#39;NOTIFY_EMAIL_READY_WRITE_REVIEW&amp;#39;
#142: &amp;#39;NOTIFY_HEADER_END_PRODUCT_REVIEWS_WRITE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_music_infomain_template_varsphp&#34;&gt;includes/modules/pages/product_music_info/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_MUSIC_INFO&amp;#39;
#33: &amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;, (int)$_GET[&amp;#39;products_id&amp;#39;]
#108: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_MUSIC_INFO&amp;#39;
#140: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_MUSIC_INFO&amp;#39;
#148: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_MUSIC_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_music_infoheader_phpphp&#34;&gt;includes/modules/pages/product_music_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCT_MUSIC_INFO&amp;#39;
#28: &amp;#39;NOTIFY_HEADER_END_PRODUCT_MUSIC_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_music_infomain_template_vars_product_typephp&#34;&gt;includes/modules/pages/product_music_info/main_template_vars_product_type.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_MUSIC_INFO&amp;#39;
#70: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_MUSIC_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_reviews_infoheader_phpphp&#34;&gt;includes/modules/pages/product_reviews_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#15: &amp;#39;NOTIFY_HEADER_START_PRODUCT_REVIEWS_INFO&amp;#39;
#116: &amp;#39;NOTIFY_HEADER_END_PRODUCT_REVIEWS_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespageslogoffheader_phpphp&#34;&gt;includes/modules/pages/logoff/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_LOGOFF&amp;#39;
#32: &amp;#39;NOTIFY_HEADER_END_LOGOFF&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesredirectheader_phpphp&#34;&gt;includes/modules/pages/redirect/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#35: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_PRODUCT&amp;#39;, [], $_GET[&amp;#39;products_id&amp;#39;], $_SESSION[&amp;#39;languages_id&amp;#39;]
#43: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_PRODUCT&amp;#39;, [], $_GET[&amp;#39;products_id&amp;#39;], $default_language_id
#57: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_MUSIC_ARTIST&amp;#39;, [], $_GET[&amp;#39;artists_id&amp;#39;], $_SESSION[&amp;#39;languages_id&amp;#39;]
#66: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_MUSIC_ARTIST&amp;#39;, [], $_GET[&amp;#39;artists_id&amp;#39;], $default_language_id
#81: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_RECORD_COMPANY&amp;#39;, [], $_GET[&amp;#39;record_company_id&amp;#39;], $_SESSION[&amp;#39;languages_id&amp;#39;]
#90: &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_RECORD_COMPANY&amp;#39;, [], $_GET[&amp;#39;record_company_id&amp;#39;], $default_language_id
#104:  &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_BANNER&amp;#39;, [ &amp;#39;banners_id&amp;#39; =&amp;gt; (int)$_GET[&amp;#39;goto&amp;#39;], &amp;#39;banners_url&amp;#39; =&amp;gt; $banner-&amp;gt;fields[&amp;#39;banners_url&amp;#39;], ] 
#124:  &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_MANUFACTURER&amp;#39;, [ &amp;#39;manufacturers_id&amp;#39; =&amp;gt; $_GET[&amp;#39;manufacturers_id&amp;#39;], &amp;#39;manufacturers_url&amp;#39; =&amp;gt; $manufacturer-&amp;gt;fields[&amp;#39;manufacturers_url&amp;#39;], &amp;#39;language_id&amp;#39; =&amp;gt; $_SESSION[&amp;#39;languages_id&amp;#39;], ] 
#150:  &amp;#39;NOTIFY_BEFORE_REDIRECT_ACTION_MANUFACTURER&amp;#39;, [ &amp;#39;manufacturers_id&amp;#39; =&amp;gt; $_GET[&amp;#39;manufacturers_id&amp;#39;], &amp;#39;manufacturers_url&amp;#39; =&amp;gt; $manufacturer-&amp;gt;fields[&amp;#39;manufacturers_url&amp;#39;], &amp;#39;language_id&amp;#39; =&amp;gt; $default_language_id, ] 
#175: &amp;#39;NOTIFY_REDIRECT_DEFAULT_ACTION&amp;#39;, $default_language_id
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesindexmain_template_varsphp&#34;&gt;includes/modules/pages/index/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_INDEX_MAIN_TEMPLATE_VARS&amp;#39;
#54: &amp;#39;NOTIFY_HEADER_INDEX_MAIN_TEMPLATE_VARS_RELEASE_PRODUCT_TYPE_VARS&amp;#39;
#229: &amp;#39;NOTIFY_HEADER_INDEX_MAIN_TEMPLATE_VARS_PAGE_BODY&amp;#39;, NULL, $tpl_page_body, $current_categories_name, $current_categories_description
#234: &amp;#39;NOTIFY_HEADER_END_INDEX_MAIN_TEMPLATE_VARS&amp;#39;, NULL, $current_categories_description
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesindexheader_phpphp&#34;&gt;includes/modules/pages/index/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_INDEX&amp;#39;
#63:  &amp;#39;NOTIFY_INDEX_CATEGORY_STATUS_CHECK&amp;#39;, [&amp;#39;cPath&amp;#39; =&amp;gt; $cPath, &amp;#39;current_category_id&amp;#39; =&amp;gt; $current_category_id], $category_redirect_handled, $current_category_not_found, $current_category_is_disabled, $current_category_has_products, $current_category_has_subcats, $category_depth 
#146: &amp;#39;NOTIFY_HEADER_END_INDEX&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_infomain_template_varsphp&#34;&gt;includes/modules/pages/product_info/main_template_vars.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_INFO&amp;#39;
#33: &amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;, (int)$_GET[&amp;#39;products_id&amp;#39;]
#109: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_INFO&amp;#39;
#137: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_INFO&amp;#39;
#145: &amp;#39;NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_infoheader_phpphp&#34;&gt;includes/modules/pages/product_info/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCT_INFO&amp;#39;
#28: &amp;#39;NOTIFY_HEADER_END_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproduct_infomain_template_vars_product_typephp&#34;&gt;includes/modules/pages/product_info/main_template_vars_product_type.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_INFO&amp;#39;
#35: &amp;#39;NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_INFO&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesgv_faqheader_phpphp&#34;&gt;includes/modules/pages/gv_faq/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_GV_FAQ&amp;#39;
#37: &amp;#39;NOTIFY_HEADER_END_GV_FAQ&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesfeatured_categoriesheader_phpphp&#34;&gt;includes/modules/pages/featured_categories/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_HEADER_START_FEATURED_CATEGORIES&amp;#39;
#47: &amp;#39;NOTIFY_HEADER_END_FEATURED_CATEGORIES&amp;#39;, null
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_notificationsheader_phpphp&#34;&gt;includes/modules/pages/account_notifications/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_NOTIFICATION&amp;#39;
#136: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_NOTIFICATION&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesabout_usheader_phpphp&#34;&gt;includes/modules/pages/about_us/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ABOUT_US&amp;#39;
#18: &amp;#39;NOTIFY_HEADER_END_ABOUT_US&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagespassword_resetheader_phpphp&#34;&gt;includes/modules/pages/password_reset/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#15: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_PASSWORD_RESET&amp;#39;
#57: &amp;#39;NOTIFY_HEADER_ACCOUNT_PASSWORD_CHANGED&amp;#39;, $customer_id, $password_new, $nickname
#64: &amp;#39;NOTIFY_HEADER_END_PASSWORD_RESET&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaddress_bookheader_phpphp&#34;&gt;includes/modules/pages/address_book/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ADDRESS_BOOK&amp;#39;
#24: &amp;#39;NOTIFY_HEADER_END_ADDRESS_BOOK&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescreate_accountheader_phpphp&#34;&gt;includes/modules/pages/create_account/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CREATE_ACCOUNT&amp;#39;
#20: &amp;#39;NOTIFY_HEADER_END_CREATE_ACCOUNT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccountheader_phpphp&#34;&gt;includes/modules/pages/account/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT&amp;#39;
#29: &amp;#39;NOTIFY_HEADER_END_ACCOUNT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_passwordheader_phpphp&#34;&gt;includes/modules/pages/account_password/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_PASSWORD&amp;#39;
#49: &amp;#39;NOTIFY_HEADER_ACCOUNT_PASSWORD_CHANGED&amp;#39;, $_SESSION[&amp;#39;customer_id&amp;#39;], $password_new, $check_customer-&amp;gt;fields[&amp;#39;customers_nick&amp;#39;]
#66: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_PASSWORD&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_shipping_addressheader_phpphp&#34;&gt;includes/modules/pages/checkout_shipping_address/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_SHIPPING_ADDRESS&amp;#39;
#57: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_SHIPPING_ADDRESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesshopping_cartheader_phpphp&#34;&gt;includes/modules/pages/shopping_cart/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_SHOPPING_CART&amp;#39;
#41: &amp;#39;NOTIFY_HEADER_SHOPPING_CART_BEFORE_PRODUCTS_LOOP&amp;#39;, null, $products
#96: &amp;#39;NOTIFY_HEADER_SHOPPING_CART_IN_ATTRIBUTES_LOOP&amp;#39;, $option, $attrArray, $attributes_values-&amp;gt;fields, $value, $products, $i
#169: &amp;#39;NOTIFY_HEADER_SHOPPING_CART_IN_PRODUCTS_LOOP&amp;#39;, $i, $productArray
#173: &amp;#39;NOTIFY_HEADER_SHOPPING_CART_AFTER_PRODUCTS_LOOP&amp;#39;, $productArray
#195: &amp;#39;NOTIFY_HEADER_END_SHOPPING_CART&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesproducts_newheader_phpphp&#34;&gt;includes/modules/pages/products_new/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_PRODUCTS_NEW&amp;#39;
#57: &amp;#39;NOTIFY_HEADER_END_PRODUCTS_NEW&amp;#39;, null
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaccount_editheader_phpphp&#34;&gt;includes/modules/pages/account_edit/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ACCOUNT_EDIT&amp;#39;
#91: &amp;#39;NOTIFY_NICK_CHECK_FOR_EXISTING_EMAIL&amp;#39;, $email_address, $nick_error, $nick
#102: &amp;#39;NOTIFY_HEADER_ACCOUNT_EDIT_VERIFY_COMPLETE&amp;#39;
#106: &amp;#39;NOTIFY_NICK_UPDATE_EMAIL_ADDRESS&amp;#39;, $nick, $email_address
#148: &amp;#39;NOTIFY_HEADER_ACCOUNT_EDIT_UPDATES_COMPLETE&amp;#39;
#215: &amp;#39;NOTIFY_HEADER_END_ACCOUNT_EDIT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagessite_mapheader_phpphp&#34;&gt;includes/modules/pages/site_map/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_HEADER_START_SITE_MAP&amp;#39;
#25: &amp;#39;NOTIFY_HEADER_END_SITE_MAP&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesloginheader_phpphp&#34;&gt;includes/modules/pages/login/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_LOGIN&amp;#39;
#70: &amp;#39;NOTIFY_LOGIN_BANNED&amp;#39;
#85: &amp;#39;NOTIFY_PROCESS_3RD_PARTY_LOGINS&amp;#39;, $email_address, $password, $loginAuthorized
#105: &amp;#39;NOTIFY_LOGIN_SUCCESS&amp;#39;
#144: &amp;#39;NOTIFY_LOGIN_FAILURE&amp;#39;
#174: &amp;#39;NOTIFY_HEADER_END_LOGIN&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagescheckout_processheader_phpphp&#34;&gt;includes/modules/pages/checkout_process/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_CHECKOUT_PROCESS&amp;#39;
#17: &amp;#39;NOTIFY_CHECKOUT_PROCESS_BEFORE_CART_RESET&amp;#39;, $insert_id
#25: &amp;#39;NOTIFY_HEADER_END_CHECKOUT_PROCESS&amp;#39;, $insert_id
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulespagesaddress_book_processheader_phpphp&#34;&gt;includes/modules/pages/address_book_process/header_php.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#10: &amp;#39;NOTIFY_HEADER_START_ADDRESS_BOOK_PROCESS&amp;#39;
#32: &amp;#39;NOTIFY_HEADER_ADDRESS_BOOK_DELETION_DONE&amp;#39;
#169: &amp;#39;NOTIFY_ADDRESS_BOOK_PROCESS_VALIDATION&amp;#39;, array(), $error
#198: &amp;#39;NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_ADDRESS_BOOK_RECORD&amp;#39;, array_merge(array(&amp;#39;address_book_id&amp;#39; =&amp;gt; $_GET[&amp;#39;edit&amp;#39;], &amp;#39;customers_id&amp;#39; =&amp;gt; $_SESSION[&amp;#39;customer_id&amp;#39;]), $sql_data_array)
#216: &amp;#39;NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_CUSTOMER_RECORD&amp;#39;, array_merge(array(&amp;#39;customers_id&amp;#39; =&amp;gt; $_SESSION[&amp;#39;customer_id&amp;#39;]), $sql_data_array)
#224: &amp;#39;NOTIFY_MODULE_ADDRESS_BOOK_ADDED_ADDRESS_BOOK_RECORD&amp;#39;, array_merge(array(&amp;#39;address_id&amp;#39; =&amp;gt; $new_address_book_id), $sql_data_array)
#246: &amp;#39;NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_PRIMARY_CUSTOMER_RECORD&amp;#39;, array_merge(array(&amp;#39;address_id&amp;#39; =&amp;gt; $new_address_book_id, &amp;#39;customers_id&amp;#39; =&amp;gt; $_SESSION[&amp;#39;customer_id&amp;#39;]), $sql_data_array)
#348: &amp;#39;NOTIFY_HEADER_END_ADDRESS_BOOK_PROCESS&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;includesmodulesproduct_prev_nextphp&#34;&gt;includes/modules/product_prev_next.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#14: &amp;#39;NOTIFY_PRODUCT_PREV_NEXT_OVERRIDE&amp;#39;, [], $prev_next_override
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminpackingslipphp&#34;&gt;admin/packingslip.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#35: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_PRE_INITIALIZATION&amp;#39;, $oID, $packingslip_context
#76: &amp;#39;NOTIFY_ADMIN_ORDERS_PACKINGSLIP_ADDITIONAL_DATA_TOP&amp;#39;, $oID, $additional_content
#180: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_HEADING&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#207: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_LOAD_PARENT_ORDER&amp;#39;, $oID, $split_order_data
#215: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_SORT_DISPLAY&amp;#39;, $order-&amp;gt;products, $sort_order
#289: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_DATA&amp;#39;,  $order-&amp;gt;products[$i][&amp;#39;id&amp;#39;], $extra_data
#319: &amp;#39;NOTIFY_ADMIN_PACKINGSLIP_SPLIT_PRODUCTS&amp;#39;, $split_order_data, $extra_products_html
#381: &amp;#39;NOTIFY_ADMIN_ORDERS_PACKINGSLIP_ADDITIONAL_DATA_BOTTOM&amp;#39;, $oID, $additional_content
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminattributes_controllerphp&#34;&gt;admin/attributes_controller.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#388: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_ADD_PRODUCT_ATTRIBUTES&amp;#39;, $products_attributes_id
#545: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_UPDATE_PRODUCT_ATTRIBUTE&amp;#39;, $attribute_id
#559: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_ATTRIBUTE&amp;#39;, [&amp;#39;attribute_id&amp;#39; =&amp;gt; $attribute_id], $attribute_id
#582: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_ALL&amp;#39;, [&amp;#39;pID&amp;#39; =&amp;gt; $_POST[&amp;#39;products_filter&amp;#39;]]
#595: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_OPTION_NAME_VALUES&amp;#39;, [&amp;#39;pID&amp;#39; =&amp;gt; $_POST[&amp;#39;products_filter&amp;#39;], &amp;#39;options_id&amp;#39; =&amp;gt; $_POST[&amp;#39;products_options_id_all&amp;#39;]]
#768: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_ADDITIONAL_ACTIONS_DROPDOWN_UPPER&amp;#39;, $zc_products, $action, $products_filter, $current_category_id, $additional_actions
#784: &amp;#39;NOTIFY_ATTRIBUTE_CONTROLLER_ADDITIONAL_ACTIONS_DROPDOWN_SUBMENU&amp;#39;, $zc_products, $action, $products_filter, $current_category_id, $additional_actions
#1420: &amp;#39;NOTIFY_ADMIN_PRODUCT_ATTRIBUTES_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $attributes_value, $extra_attributes_inputs
#2100: &amp;#39;NOTIFY_ADMIN_PRODUCT_ATTRIBUTES_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, [], $extra_attributes_inputs
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminproductphp&#34;&gt;admin/product.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#28: &amp;#39;NOTIFY_BEGIN_ADMIN_PRODUCTS&amp;#39;, $action, $action
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminlanguagesphp&#34;&gt;admin/languages.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#191: &amp;#39;NOTIFY_ADMIN_LANGUAGE_INSERT&amp;#39;, (int)$insert_id
#269: &amp;#39;NOTIFY_ADMIN_LANGUAGE_DELETE&amp;#39;, (int)$lID
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;admincategory_product_listingphp&#34;&gt;admin/category_product_listing.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#306: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_DEFAULT_ACTION&amp;#39;, $action, $clearAction
#598: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_HEADERS_B4_QTY&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#640:  &amp;#39;NOTIFY_ADMIN_CATEGORY_LISTING_HEADERS&amp;#39;, [ &amp;#39;categories&amp;#39; =&amp;gt; $categories, &amp;#39;categories_sql&amp;#39; =&amp;gt; $sql, &amp;#39;showing_products&amp;#39; =&amp;gt; $show_prod_labels, ], $extra_headings 
#678: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_HEADERS_AFTER_QTY&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#759: &amp;#39;NOTIFY_ADMIN_CATEGORY_LISTING_DATA&amp;#39;, $category, $extra_data
#800: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_ADD_ICON_CATEGORY&amp;#39;, $category, $additional_icons
#820:  &amp;#39;NOTIFY_ADMIN_PROD_LISTING_ADD_ACTION_ICONS&amp;#39;, [ &amp;#39;category&amp;#39; =&amp;gt; ($category ?? null), &amp;#39;product&amp;#39; =&amp;gt; ($product ?? null), &amp;#39;cPath&amp;#39; =&amp;gt; ($cPath ?? null), &amp;#39;current_category_id&amp;#39; =&amp;gt; $current_category_id ], $extra_action_buttons 
#892: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_PRODUCTS_QUERY&amp;#39;, &amp;#39;&amp;#39;, $extra_select, $extra_from, $extra_joins, $extra_ands, $order_by, $extra_search_fields
#994: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_DATA_B4_QTY&amp;#39;, $product, $extra_data
#1025: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_DATA_AFTER_QTY&amp;#39;, $product, $extra_data
#1038: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_ADD_ICON&amp;#39;, $product, $additional_icons
#1259: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_DEFAULT_INFOBOX&amp;#39;, $action, $heading, $contents
#1284: &amp;#39;NOTIFY_ADMIN_PROD_LISTING_SKIP_ACTIONS&amp;#39;, $current_category_id, $zc_skip_products, $zc_skip_categories, $messageSubCategories
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminadmin_activityphp&#34;&gt;admin/admin_activity.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#340: &amp;#39;NOTIFY_ADMIN_ACTIVITY_LOG_RESET&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesclassesclassadminzcobserverlogeventlistenerphp&#34;&gt;admin/includes/classes/class.admin.zcObserverLogEventListener.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#63: $this-&amp;gt;notifier-&amp;gt;notify(&amp;#39;NOTIFY_ADMIN_FIRE_LOG_WRITERS&amp;#39;, $log_data
#188: $this-&amp;gt;notifier-&amp;gt;notify(&amp;#39;NOTIFY_ADMIN_FIRE_LOG_WRITER_RESET&amp;#39;
#203: &amp;#39;NOTIFY_ADMIN_ACTIVITY_LOG_EVENT&amp;#39;, $message, $severity
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesinit_includesinit_sanitizephp&#34;&gt;admin/includes/init_includes/init_sanitize.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#270: &amp;#39;NOTIFY_ADMIN_CONFIGURATION_SPECIAL_CHARACTERS&amp;#39;, [], $extra_configs_with_special_characters
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesinit_includesinit_languagesphp&#34;&gt;admin/includes/init_includes/init_languages.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#20: &amp;#39;NOTIFY_LANGUAGE_CHANGE_REQUESTED_BY_ADMIN_VISITOR&amp;#39;, $_GET[&amp;#39;language&amp;#39;], $lng
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesinit_includesinit_admin_historyphp&#34;&gt;admin/includes/init_includes/init_admin_history.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#11: &amp;#39;NOTIFY_ADMIN_ACTIVITY_LOG_EVENT&amp;#39;, &amp;#39;POST&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesinit_includesinit_admin_authphp&#34;&gt;admin/includes/init_includes/init_admin_auth.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#80: &amp;#39;NOTIFY_ADMIN_NONSUPERUSER_ACTION&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesheaderphp&#34;&gt;admin/includes/header.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#183: &amp;#39;NOTIFY_ADMIN_HEADER_UPPERMENU&amp;#39;, $upperMenuArray, $upperMenuOverrideArray
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesfooterphp&#34;&gt;admin/includes/footer.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#26: &amp;#39;NOTIFY_ADMIN_FOOTER_END&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesfunctionshtml_outputphp&#34;&gt;admin/includes/functions/html_output.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#17:  &amp;#39;NOTIFY_HANDLE_ADMIN_HREF_LINK&amp;#39;, array( &amp;#39;page&amp;#39; =&amp;gt; $page, &amp;#39;parameters&amp;#39; =&amp;gt; $parameters, &amp;#39;add_session_id&amp;#39; =&amp;gt; false, ), $page, $parameters 
#76: &amp;#39;NOTIFY_SEFU_INTERCEPT_ADMCATHREF&amp;#39;, array(), $link, $page, $parameters, $connection
#118: &amp;#39;NOTIFY_SEFU_INTERCEPT_ADMCATHOME&amp;#39;, array(), $link, $connection
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesfunctionsfunctions_helpphp&#34;&gt;admin/includes/functions/functions_help.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#174: &amp;#39;NOTIFIER_PLUGIN_HELP_PAGE_URL_LOOKUP&amp;#39;, $page, $help_page
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesfunctionsadmin_accessphp&#34;&gt;admin/includes/functions/admin_access.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#459: &amp;#39;NOTIFY_ADMIN_LOGIN_DENY&amp;#39;, $admin_name, $error, $message
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesnew_product_previewphp&#34;&gt;admin/includes/modules/new_product_preview.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#52: &amp;#39;NOTIFY_ADMIN_PRODUCT_IMAGE_UPLOADED&amp;#39;, $products_image, $products_image_name
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesupdate_productphp&#34;&gt;admin/includes/modules/update_product.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#36: &amp;#39;NOTIFY_MODULES_UPDATE_PRODUCT_START&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;products_id&amp;#39; =&amp;gt; $products_id]
#124: &amp;#39;NOTIFY_ADMIN_UPDATE_PRODUCT_UPDATE&amp;#39;, $products_id, $sql_data_array
#226: &amp;#39;NOTIFY_MODULES_UPDATE_PRODUCT_END&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;products_id&amp;#39; =&amp;gt; $products_id]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesproduct_free_shippingcollect_infophp&#34;&gt;admin/includes/modules/product_free_shipping/collect_info.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#231: &amp;#39;NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $pInfo, $extra_product_inputs
#286: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_SECTION_TOP&amp;#39;, $pInfo, $additional_fields
#326: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_ABOVE&amp;#39;, $pInfo, $additional_fields
#380: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_BELOW&amp;#39;, $pInfo, $additional_fields
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesdocument_generalcollect_infophp&#34;&gt;admin/includes/modules/document_general/collect_info.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#245: &amp;#39;NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $pInfo, $extra_product_inputs
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulescollect_infophp&#34;&gt;admin/includes/modules/collect_info.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#231: &amp;#39;NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $pInfo, $extra_product_inputs
#286: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_SECTION_TOP&amp;#39;, $pInfo, $additional_fields
#326: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_ABOVE&amp;#39;, $pInfo, $additional_fields
#380: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_BELOW&amp;#39;, $pInfo, $additional_fields
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulessearch_boxphp&#34;&gt;admin/includes/modules/search_box.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#63: &amp;#39;NOTIFY_ADMIN_SEARCH_BOX_FORM_GROUP&amp;#39;, &amp;#39;&amp;#39;, $extra_form_group
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesdocument_productcollect_infophp&#34;&gt;admin/includes/modules/document_product/collect_info.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#231: &amp;#39;NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $pInfo, $extra_product_inputs
#286: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_SECTION_TOP&amp;#39;, $pInfo, $additional_fields
#326: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_ABOVE&amp;#39;, $pInfo, $additional_fields
#380: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_BELOW&amp;#39;, $pInfo, $additional_fields
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesdelete_productphp&#34;&gt;admin/includes/modules/delete_product.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#35: &amp;#39;NOTIFY_ADMIN_DELETE_PRODUCT_INFOBOX&amp;#39;, $pInfo, $product_master_category_string, $product_categories_string
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulescopy_product_confirmphp&#34;&gt;admin/includes/modules/copy_product_confirm.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#76: &amp;#39;NOTIFY_MODULES_COPY_PRODUCT_CONFIRM_DUPLICATE_FIELDS&amp;#39;, $product, $separately_updated_fields, $casted_fields
#243: &amp;#39;NOTIFY_MODULES_COPY_TO_CONFIRM_DUPLICATE&amp;#39;, compact(&amp;#39;products_id&amp;#39;, &amp;#39;dup_products_id&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulesproduct_musiccollect_infophp&#34;&gt;admin/includes/modules/product_music/collect_info.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#277: &amp;#39;NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS&amp;#39;, $pInfo, $extra_product_inputs
#332: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_SECTION_TOP&amp;#39;, $pInfo, $additional_fields
#372: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_ABOVE&amp;#39;, $pInfo, $additional_fields
#426: &amp;#39;NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_BELOW&amp;#39;, $pInfo, $additional_fields
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminincludesmodulescopy_productphp&#34;&gt;admin/includes/modules/copy_product.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#68: &amp;#39;NOTIFY_ADMIN_PRODUCT_COPY_TO_ATTRIBUTES&amp;#39;, $pInfo, $contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminhomephp&#34;&gt;admin/home.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#42: &amp;#39;NOTIFY_ADMIN_FOOTER_END&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminconfigurationphp&#34;&gt;admin/configuration.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#55: &amp;#39;NOTIFY_ADMIN_CONFIG_CHANGE&amp;#39;, $result-&amp;gt;fields[&amp;#39;configuration_key&amp;#39;]
#94: &amp;#39;NOTIFY_ADMIN_CONFIG_CHANGE&amp;#39;, $result-&amp;gt;fields[&amp;#39;configuration_key&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminoptions_values_managerphp&#34;&gt;admin/options_values_manager.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#162: &amp;#39;OPTIONS_VALUES_MANAGER_DELETE_VALUE&amp;#39;, [&amp;#39;value_id&amp;#39; =&amp;gt; $value_id]
#543:  &amp;#39;OPTIONS_VALUES_MANAGER_DELETE_VALUES_OF_OPTIONNAME&amp;#39;, [ &amp;#39;current_products_id&amp;#39; =&amp;gt; $current_products_id, &amp;#39;remove_ids&amp;#39; =&amp;gt; $remove_downloads_ids, &amp;#39;options_id&amp;#39; =&amp;gt; $options_id_from, &amp;#39;options_values_id&amp;#39; =&amp;gt; $options_values_values_id_from ] 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminmanufacturersphp&#34;&gt;admin/manufacturers.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#31: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_INSERT_UPDATE&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;manufacturers_id&amp;#39; =&amp;gt; $manufacturers_id ?? 0], $sql_data_array
#101: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_INSERT_UPDATE_COMPLETE&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;manufacturers_id&amp;#39; =&amp;gt; (int)$manufacturers_id]
#143: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_DELETECONFIRM&amp;#39;, [&amp;#39;manufacturers_id&amp;#39; =&amp;gt; (int)$manufacturers_id]
#153: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_DEFAULT_ACTION&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action]
#202: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_EXTRA_COLUMN_HEADING&amp;#39;, [], $extra_headings
#276: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_EXTRA_COLUMN_DATA&amp;#39;, $manufacturer, $extra_data
#337: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_NEW&amp;#39;, &amp;#39;&amp;#39;, $additional_contents
#383: &amp;#39;NOTIFY_ADMIN_MANUFACTURERS_EDIT&amp;#39;, $mInfo, $additional_contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;admininvoicephp&#34;&gt;admin/invoice.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#39: &amp;#39;NOTIFY_ADMIN_INVOICE_PRE_INITIALIZATION&amp;#39;, $oID, $invoice_context, $render_html_head
#82: &amp;#39;NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_TOP&amp;#39;, $oID, $additional_content
#186: &amp;#39;NOTIFY_ADMIN_INVOICE_HEADING_B4_TAX&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#227: &amp;#39;NOTIFY_ADMIN_INVOICE_HEADERS_AFTER_TAX&amp;#39;, &amp;#39;&amp;#39;, $extra_headings
#248: &amp;#39;NOTIFY_ADMIN_INVOICE_SORT_DISPLAY&amp;#39;, $order-&amp;gt;products, $sort_order
#333: &amp;#39;NOTIFY_ADMIN_INVOICE_DATA_B4_TAX&amp;#39;,  $order-&amp;gt;products[$i][&amp;#39;id&amp;#39;], $extra_data
#389: &amp;#39;NOTIFY_ADMIN_INVOICE_DATA_AFTER_TAX&amp;#39;, $order-&amp;gt;products[$i][&amp;#39;id&amp;#39;], $extra_data
#407: &amp;#39;NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_MIDDLE&amp;#39;, $oID, $additional_content
#444: &amp;#39;NOTIFY_ADMIN_INVOICE_TOTALS_CUSTOM&amp;#39;, $oID, $extra_totals_html
#508: &amp;#39;NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_BOTTOM&amp;#39;, $oID, $additional_content
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminwhos_onlinephp&#34;&gt;admin/whos_online.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#205: &amp;#39;ADMIN_WHOSONLINE_IP_LINKS&amp;#39;, $item, $additional_ipaddress_links, $whois_url
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminmodulesphp&#34;&gt;admin/modules.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#133: &amp;#39;NOTIFY_ADMIN_MODULES_DO_INSTALL&amp;#39;, [&amp;#39;module_name&amp;#39; =&amp;gt; $class], $result  // $result may not be reliable because many modules do not return a success/fail indicator
#164: &amp;#39;NOTIFY_ADMIN_MODULES_DO_UNINSTALL&amp;#39;, [&amp;#39;module_name&amp;#39; =&amp;gt; $class], $result  // $result may not be reliable because many modules return nothing regardless of success/fail
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminezpagesphp&#34;&gt;admin/ezpages.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#103: &amp;#39;NOTIFY_ADMIN_EZPAGES_UPDATE_BASE&amp;#39;, $action, $page_error, $sql_data_array
#138: &amp;#39;NOTIFY_ADMIN_EZPAGES_UPDATE_LANG_INSERT&amp;#39;, [&amp;#39;pages_id&amp;#39; =&amp;gt; (int)$pages_id, &amp;#39;languages_id&amp;#39; =&amp;gt; $language_id], $sql_data_array
#155: &amp;#39;NOTIFY_ADMIN_EZPAGES_UPDATE_LANG_UPDATE&amp;#39;, [&amp;#39;pages_id&amp;#39; =&amp;gt; (int)$pages_id, &amp;#39;languages_id&amp;#39; =&amp;gt; $language_id], $sql_data_array
#273: &amp;#39;NOTIFY_ADMIN_EZPAGES_NEW&amp;#39;, &amp;#39;&amp;#39;, $parameters
#349: &amp;#39;NOTIFY_ADMIN_EZPAGES_FORM_FIELDS&amp;#39;, $ezInfo, $extra_page_inputs
#530: &amp;#39;NOTIFY_ADMIN_EZPAGES_MENU_LEGEND&amp;#39;, [], $extra_legends
#775: &amp;#39;NOTIFY_ADMIN_EZPAGES_EXTRA_ACTION_ICONS&amp;#39;, $page, $extra_action_icons
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;admincoupon_adminphp&#34;&gt;admin/coupon_admin.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#118: &amp;#39;ADMIN_COUPON_CODE_EMAILED_TO_CUSTOMER&amp;#39;, $coupon_result-&amp;gt;fields[&amp;#39;coupon_code&amp;#39;], $item[&amp;#39;customers_email_address&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminindex_dashboardphp&#34;&gt;admin/index_dashboard.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#22: &amp;#39;NOTIFY_ADMIN_DASHBOARD_WIDGETS&amp;#39;, null, $widgets
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;admincategoriesphp&#34;&gt;admin/categories.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#40: &amp;#39;NOTIFY_BEGIN_ADMIN_CATEGORIES&amp;#39;, $action
#193: &amp;#39;NOTIFY_ADMIN_CATEGORIES_UPDATE_OR_INSERT_FINISH&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;categories_id&amp;#39; =&amp;gt; (int)$categories_id]
#352: &amp;#39;NOTIFY_ADMIN_CATEGORIES_EXTRA_INPUTS&amp;#39;, $cInfo, $extra_category_inputs
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;admincustomersphp&#34;&gt;admin/customers.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#172: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_UPDATE_VALIDATE&amp;#39;, [], $error
#201: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_CUSTOMER_UPDATE&amp;#39;, $customers_id, $sql_data_array
#235:  &amp;#39;NOTIFY_ADMIN_CUSTOMERS_B4_ADDRESS_UPDATE&amp;#39;, [&amp;#39;customers_id&amp;#39; =&amp;gt; $customers_id, &amp;#39;address_book_id&amp;#39; =&amp;gt; $default_address_id], $sql_data_array 
#254:  &amp;#39;NOTIFY_ADMIN_CUSTOMER_UPDATE&amp;#39;, $customers_id, $default_address_id, $sql_data_array 
#340: &amp;#39;NOTIFIER_ADMIN_ZEN_CUSTOMERS_DELETE_CONFIRM&amp;#39;, [&amp;#39;customers_id&amp;#39; =&amp;gt; $customers_id]
#416: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_MENU_LEGEND&amp;#39;, [], $extra_legends
#598: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_CUSTOMER_EDIT&amp;#39;, $cInfo, $additional_fields
#1147: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_LISTING_HEADER&amp;#39;, [], $additional_headings
#1298:  &amp;#39;NOTIFY_ADMIN_CUSTOMERS_LISTING_NEW_FIELDS&amp;#39;, [], $new_fields, $disp_order 
#1419:  &amp;#39;NOTIFY_ADMIN_CUSTOMERS_LISTING_ELEMENT&amp;#39;, array_merge($result, $customer), $additional_columns, $customer 
#1706: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_PLACE_ORDER_BUTTON&amp;#39;, $cInfo, $contents, $place_order_override
#1742: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_MENU_BUTTONS&amp;#39;, $cInfo, $contents
#1847: &amp;#39;NOTIFY_ADMIN_CUSTOMERS_MENU_BUTTONS_END&amp;#39;, $cInfo ?? new stdClass, $contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminordersphp&#34;&gt;admin/orders.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#80: &amp;#39;NOTIFY_ADMIN_ORDER_PREDISPLAY_HOOK&amp;#39;, $oID, $action
#254: &amp;#39;NOTIFY_ADMIN_ORDERS_UPDATE_ORDER_START&amp;#39;, $oID
#374: &amp;#39;NOTIFY_ADMIN_ORDERS_DEFAULT_ACTION&amp;#39;, $oID, $order, $action
#398: &amp;#39;NOTIFY_ADMIN_ORDERS_HEAD&amp;#39;, [], $extra_head
#430: &amp;#39;NOTIFY_ADMIN_ORDERS_HEADING_TITLE&amp;#39;, [&amp;#39;action&amp;#39; =&amp;gt; $action, &amp;#39;order_exists&amp;#39; =&amp;gt; $order_exists, &amp;#39;oID&amp;#39; =&amp;gt; $oID], $heading_title, $extra_top_content
#512: &amp;#39;NOTIFY_ADMIN_ORDERS_LISTING_BUTTONS&amp;#39;, false, $extra_listing_content
#518: &amp;#39;NOTIFY_ADMIN_ORDERS_EDIT_BEGIN&amp;#39;, $oID, $order
#560: &amp;#39;NOTIFY_ADMIN_ORDERS_UPPER_BUTTONS&amp;#39;, $oID, $left_side_buttons, $right_side_buttons
#604: &amp;#39;NOTIFY_ADMIN_ORDERS_ADDRESS_FOOTERS&amp;#39;, &amp;#39;customer&amp;#39;, $address_footer_suffix, $order-&amp;gt;customer
#638: &amp;#39;ADMIN_ORDERS_IP_LINKS&amp;#39;, $lookup_ip, $whois_url, $whois_provider_url, $lookup_ip2, $whois_url2
#686: &amp;#39;NOTIFY_ADMIN_ORDERS_ADDRESS_FOOTERS&amp;#39;, &amp;#39;delivery&amp;#39;, $address_footer_suffix, $order-&amp;gt;delivery
#719: &amp;#39;NOTIFY_ADMIN_ORDERS_ADDRESS_FOOTERS&amp;#39;, &amp;#39;billing&amp;#39;, $address_footer_suffix, $order-&amp;gt;billing
#836: &amp;lt;?php &amp;#39;NOTIFY_ADMIN_ORDERS_PAYMENTDATA_COLUMN2&amp;#39;, $oID, $order ?&amp;gt;
#868: &amp;#39;NOTIFY_ADMIN_ORDER_SPLIT_ORDER&amp;#39;, $oID, $extra_order_actions
#1034: &amp;#39;NOTIFY_ADMIN_ORDERS_CONTENT_UNDER_PRODUCTS&amp;#39;, [&amp;#39;oID&amp;#39; =&amp;gt; $oID], $extra_content
#1066: &amp;#39;NOTIFY_ADMIN_ORDERS_STATUS_HISTORY_EXTRA_COLUMN_HEADING&amp;#39;, [], $extra_headings
#1117: &amp;#39;NOTIFY_ADMIN_ORDERS_STATUS_HISTORY_EXTRA_COLUMN_DATA&amp;#39;, $item, $extra_data
#1154: &amp;#39;NOTIFY_ADMIN_ORDERS_AFTER_STATUS_LISTING&amp;#39;, $oID, $additional_content
#1181: &amp;#39;NOTIFY_ADMIN_ORDERS_ADDL_HISTORY_INPUTS&amp;#39;, []
#1203: &amp;#39;NOTIFY_ADMIN_ORDERS_EXTRA_STATUS_INPUTS&amp;#39;, $order, $extra_status_inputs
#1248: &amp;#39;NOTIFY_ADMIN_ORDERS_AFTER_COMMENTS&amp;#39;, $oID, $additional_content
#1258: &amp;#39;NOTIFY_ADMIN_ORDERS_EDIT_BUTTONS&amp;#39;, $oID, $order, $extra_buttons
#1286: &amp;#39;NOTIFY_ADMIN_ORDERS_MENU_LEGEND&amp;#39;, [], $extra_legends
#1322: &amp;#39;NOTIFY_ADMIN_ORDERS_LIST_EXTRA_COLUMN_HEADING&amp;#39;, [], $extra_headings
#1387: &amp;#39;NOTIFY_ADMIN_ORDERS_SEARCH_PARMS&amp;#39;, $keywords, $search, $search_distinct, $new_fields, $new_table, $order_by
#1454: &amp;#39;NOTIFY_ADMIN_ORDERS_SHOW_ORDER_DIFFERENCE&amp;#39;, [], $orders-&amp;gt;fields, $show_difference, $extra_action_icons
#1551: &amp;#39;NOTIFY_ADMIN_ORDERS_LIST_EXTRA_COLUMN_DATA&amp;#39;, ($oInfo ?? []), $orders-&amp;gt;fields, $extra_data
#1628: &amp;#39;NOTIFY_ADMIN_ORDERS_MENU_BUTTONS&amp;#39;, $oInfo, $contents
#1707: &amp;#39;NOTIFY_ADMIN_ORDERS_MENU_BUTTONS_END&amp;#39;, ($oInfo ?? []), $contents
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;adminoptions_name_managerphp&#34;&gt;admin/options_name_manager.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#181: &amp;#39;OPTIONS_NAME_MANAGER_DELETE_OPTION&amp;#39;, [&amp;#39;option_id&amp;#39; =&amp;gt; $option_id, &amp;#39;options_values_id&amp;#39; =&amp;gt; (int)$remove_option_value[&amp;#39;products_options_values_id&amp;#39;]]
#300: &amp;#39;OPTIONS_NAME_MANAGER_UPDATE_OPTIONS_VALUES_DELETE&amp;#39;, [ &amp;#39;products_id&amp;#39; =&amp;gt; $all_update_product[&amp;#39;products_id&amp;#39;], &amp;#39;options_id&amp;#39; =&amp;gt; $all_options_value[&amp;#39;products_options_id&amp;#39;], &amp;#39;options_values_id&amp;#39; =&amp;gt; $all_options_value[&amp;#39;products_options_values_id&amp;#39;] ] 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;notifier_reportphp&#34;&gt;notifier_report.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#46: // Determine if the current line contains a &amp;#39;-&amp;gt;notify&amp;#39;, continuing if not. // $next_pos = strpos($lines[$i], &amp;#39;-&amp;gt;notify&amp;#39;
#71: &amp;#39;&amp;#39;, &amp;#39;&amp;#39;, &amp;#39;&amp;#39;, &amp;#39;$GLOBALS[\&amp;#39;zco_notifier\&amp;#39;]-&amp;gt;notify(&amp;#39;, &amp;#39;&amp;#39;,
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;not_for_releasetestframeworkunittestsnotifiersnotifierupdatehandlerstestphp&#34;&gt;not_for_release/testFramework/Unit/testsNotifiers/NotifierUpdateHandlersTest.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#30: $this-&amp;gt;base-&amp;gt;notify(&amp;#39;NOTIFY_TEST_SNAKE_CASE&amp;#39;, null, $testVar
#34: $this-&amp;gt;base-&amp;gt;notify(&amp;#39;NOTIFY_TEST_CAMEL_CASE&amp;#39;, null, $testVar
#38: $this-&amp;gt;base-&amp;gt;notify(&amp;#39;NOTIFY_TEST_UPDATE&amp;#39;, null, $testVar
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;not_for_releasetestframeworksupportzcnotifiertraitaliastestobjectphp&#34;&gt;not_for_release/testFramework/Support/zcNotifierTraitAliasTestObject.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#15: &amp;#39;NOTIFY_ORDER_CART_SUBTOTAL_CALCULATE&amp;#39;
#22: &amp;#39;NOTIFIYFOO_ORDER_CART_SUBTOTAL_CALCULATE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;not_for_releasetestframeworksupportzcnotifierbasealiastestobjectphp&#34;&gt;not_for_release/testFramework/Support/zcNotifierBaseAliasTestObject.php&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#12: &amp;#39;NOTIFY_ORDER_CART_SUBTOTAL_CALCULATE&amp;#39;
#19: &amp;#39;NOTIFIYFOO_ORDER_CART_SUBTOTAL_CALCULATE&amp;#39;
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Dev: Notifiers - List of for Zen Cart 2.2.0</title>
      <link>https://docs.zen-cart.com/dev/architecture/notifiers_list/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/notifiers_list/</guid>
      <description>
        
        
        &lt;!-- RELEASETIME - update --&gt;
&lt;!-- see find_notifiers in https://github.com/scottcwilson/zencart_tools --&gt; 
&lt;p&gt;This is a list of notifiers available in Zen Cart 2.2.0&lt;/p&gt;
&lt;p&gt;For a list of notifiers with module name, line number and parameters,
please install the &lt;a href=&#34;https://github.com/lat9/notifier_report&#34;&gt;Notifier Report&lt;/a&gt; on your site, or see &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifier_report/&#34;&gt;the output of Notifier Report&lt;/a&gt; here.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NOTIFIER_ADMIN_ZEN_CUSTOMERS_DELETE_CONFIRM
NOTIFIER_ADMIN_ZEN_DELETE_PRODUCTS_ATTRIBUTES
NOTIFIER_ADMIN_ZEN_PRODUCTS_ATTRIBUTES_DOWNLOAD_DELETE
NOTIFIER_ADMIN_ZEN_REMOVE_CATEGORY
NOTIFIER_ADMIN_ZEN_REMOVE_ORDER
NOTIFIER_ADMIN_ZEN_REMOVE_PRODUCT
NOTIFIER_CART_ADD_CART_END
NOTIFIER_CART_ADD_CART_START
NOTIFIER_CART_CLEANUP_END
NOTIFIER_CART_CLEANUP_START
NOTIFIER_CART_COUNT_CONTENTS_END
NOTIFIER_CART_COUNT_CONTENTS_START
NOTIFIER_CART_GET_PRODUCTS_END
NOTIFIER_CART_GET_PRODUCTS_START
NOTIFIER_CART_GET_QUANTITY_END_FALSE
NOTIFIER_CART_GET_QUANTITY_END_QTY
NOTIFIER_CART_GET_QUANTITY_START
NOTIFIER_CART_IN_CART_END_FALSE
NOTIFIER_CART_IN_CART_END_TRUE
NOTIFIER_CART_IN_CART_START
NOTIFIER_CART_INSTANTIATE_END
NOTIFIER_CART_INSTANTIATE_START
NOTIFIER_CART_OPTIONAL_ATTRIBUTE_ERROR_MESSAGE_HOOK
NOTIFIER_CART_OPTIONAL_SUCCESS_BUYNOW_ADDED_TO_CART
NOTIFIER_CART_OPTIONAL_SUCCESS_MULTIPLE_ADDED_TO_CART
NOTIFIER_CART_OPTIONAL_SUCCESS_PRODUCT_ADDED_TO_CART
NOTIFIER_CART_OPTIONAL_SUCCESS_UPDATED_CART
NOTIFIER_CART_REMOVE_ALL_END
NOTIFIER_CART_REMOVE_ALL_START
NOTIFIER_CART_REMOVE_END
NOTIFIER_CART_REMOVE_START
NOTIFIER_CART_RESET_END
NOTIFIER_CART_RESET_START
NOTIFIER_CART_RESTORE_CONTENTS_END
NOTIFIER_CART_RESTORE_CONTENTS_START
NOTIFIER_CART_SHOW_TOTAL_BEFORE_DISCOUNT_END
NOTIFIER_CART_SHOW_TOTAL_BEFORE_DISCOUNT_START
NOTIFIER_CART_SHOW_TOTAL_END
NOTIFIER_CART_SHOW_TOTAL_START
NOTIFIER_CART_UPDATE_QUANTITY_END
NOTIFIER_CART_UPDATE_QUANTITY_START
NOTIFIER_PLUGIN_HELP_PAGE_URL_LOOKUP
NOTIFIYFOO_ORDER_CART_SUBTOTAL_CALCULATE
NOTIFY_?LOGIN_ATTEMPT
NOTIFY_ACCOUNT_HISTORY_INFO_EXTRA_COLUMN_DATA
NOTIFY_ACCOUNT_HISTORY_INFO_EXTRA_COLUMN_HEADING
NOTIFY_ACCOUNT_HISTORY_INFO_OSH_DATA
NOTIFY_ACCOUNT_HISTORY_INFO_OSH_HEADINGS
NOTIFY_ADDRESS_BOOK_PROCESS_VALIDATION
NOTIFY_ADMIN_ACTIVITY_LOG_EVENT
NOTIFY_ADMIN_ACTIVITY_LOG_RESET
NOTIFY_ADMIN_CATEGORIES_EXTRA_INPUTS
NOTIFY_ADMIN_CATEGORIES_UPDATE_OR_INSERT_FINISH
NOTIFY_ADMIN_CATEGORY_LISTING_DATA
NOTIFY_ADMIN_CONFIG_CHANGE
NOTIFY_ADMIN_CONFIGURATION_SPECIAL_CHARACTERS
NOTIFY_ADMIN_CUSTOMERS_CUSTOMER_EDIT
NOTIFY_ADMIN_CUSTOMERS_CUSTOMER_UPDATE
NOTIFY_ADMIN_CUSTOMERS_LISTING_HEADER
NOTIFY_ADMIN_CUSTOMERS_MENU_BUTTONS
NOTIFY_ADMIN_CUSTOMERS_MENU_BUTTONS_END
NOTIFY_ADMIN_CUSTOMERS_MENU_LEGEND
NOTIFY_ADMIN_CUSTOMERS_PLACE_ORDER_BUTTON
NOTIFY_ADMIN_CUSTOMERS_UPDATE_VALIDATE
NOTIFY_ADMIN_DASHBOARD_WIDGETS
NOTIFY_ADMIN_DELETE_PRODUCT_INFOBOX
NOTIFY_ADMIN_EZPAGES_EXTRA_ACTION_ICONS
NOTIFY_ADMIN_EZPAGES_FORM_FIELDS
NOTIFY_ADMIN_EZPAGES_MENU_LEGEND
NOTIFY_ADMIN_EZPAGES_NEW
NOTIFY_ADMIN_EZPAGES_UPDATE_BASE
NOTIFY_ADMIN_EZPAGES_UPDATE_LANG_INSERT
NOTIFY_ADMIN_EZPAGES_UPDATE_LANG_UPDATE
NOTIFY_ADMIN_FIRE_LOG_WRITER_RESET
NOTIFY_ADMIN_FIRE_LOG_WRITERS
NOTIFY_ADMIN_FOOTER_END
NOTIFY_ADMIN_HEADER_UPPERMENU
NOTIFY_ADMIN_INVOICE_DATA_AFTER_TAX
NOTIFY_ADMIN_INVOICE_DATA_B4_TAX
NOTIFY_ADMIN_INVOICE_HEADERS_AFTER_TAX
NOTIFY_ADMIN_INVOICE_HEADING_B4_TAX
NOTIFY_ADMIN_INVOICE_PRE_INITIALIZATION
NOTIFY_ADMIN_INVOICE_SORT_DISPLAY
NOTIFY_ADMIN_INVOICE_TOTALS_CUSTOM
NOTIFY_ADMIN_LANGUAGE_DELETE
NOTIFY_ADMIN_LANGUAGE_INSERT
NOTIFY_ADMIN_LOGIN_DENY
NOTIFY_ADMIN_MANUFACTURERS_DEFAULT_ACTION
NOTIFY_ADMIN_MANUFACTURERS_DELETECONFIRM
NOTIFY_ADMIN_MANUFACTURERS_EDIT
NOTIFY_ADMIN_MANUFACTURERS_EXTRA_COLUMN_DATA
NOTIFY_ADMIN_MANUFACTURERS_EXTRA_COLUMN_HEADING
NOTIFY_ADMIN_MANUFACTURERS_INSERT_UPDATE
NOTIFY_ADMIN_MANUFACTURERS_INSERT_UPDATE_COMPLETE
NOTIFY_ADMIN_MANUFACTURERS_NEW
NOTIFY_ADMIN_MODULES_DO_INSTALL
NOTIFY_ADMIN_MODULES_DO_UNINSTALL
NOTIFY_ADMIN_NONSUPERUSER_ACTION
NOTIFY_ADMIN_ORDER_PREDISPLAY_HOOK
NOTIFY_ADMIN_ORDER_SPLIT_ORDER
NOTIFY_ADMIN_ORDERS_ADDL_HISTORY_INPUTS
NOTIFY_ADMIN_ORDERS_ADDRESS_FOOTERS
NOTIFY_ADMIN_ORDERS_AFTER_COMMENTS
NOTIFY_ADMIN_ORDERS_AFTER_STATUS_LISTING
NOTIFY_ADMIN_ORDERS_CONTENT_UNDER_PRODUCTS
NOTIFY_ADMIN_ORDERS_DEFAULT_ACTION
NOTIFY_ADMIN_ORDERS_EDIT_BEGIN
NOTIFY_ADMIN_ORDERS_EDIT_BUTTONS
NOTIFY_ADMIN_ORDERS_EXTRA_STATUS_INPUTS
NOTIFY_ADMIN_ORDERS_HEAD
NOTIFY_ADMIN_ORDERS_HEADING_TITLE
NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_BOTTOM
NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_MIDDLE
NOTIFY_ADMIN_ORDERS_INVOICE_ADDITIONAL_DATA_TOP
NOTIFY_ADMIN_ORDERS_LIST_EXTRA_COLUMN_DATA
NOTIFY_ADMIN_ORDERS_LIST_EXTRA_COLUMN_HEADING
NOTIFY_ADMIN_ORDERS_LISTING_BUTTONS
NOTIFY_ADMIN_ORDERS_MENU_BUTTONS
NOTIFY_ADMIN_ORDERS_MENU_BUTTONS_END
NOTIFY_ADMIN_ORDERS_MENU_LEGEND
NOTIFY_ADMIN_ORDERS_PACKINGSLIP_ADDITIONAL_DATA_BOTTOM
NOTIFY_ADMIN_ORDERS_PACKINGSLIP_ADDITIONAL_DATA_TOP
NOTIFY_ADMIN_ORDERS_PAYMENTDATA_COLUMN2
NOTIFY_ADMIN_ORDERS_SEARCH_PARMS
NOTIFY_ADMIN_ORDERS_SHOW_ORDER_DIFFERENCE
NOTIFY_ADMIN_ORDERS_STATUS_HISTORY_EXTRA_COLUMN_DATA
NOTIFY_ADMIN_ORDERS_STATUS_HISTORY_EXTRA_COLUMN_HEADING
NOTIFY_ADMIN_ORDERS_UPDATE_ORDER_START
NOTIFY_ADMIN_ORDERS_UPPER_BUTTONS
NOTIFY_ADMIN_PACKINGSLIP_DATA
NOTIFY_ADMIN_PACKINGSLIP_HEADING
NOTIFY_ADMIN_PACKINGSLIP_LOAD_PARENT_ORDER
NOTIFY_ADMIN_PACKINGSLIP_PRE_INITIALIZATION
NOTIFY_ADMIN_PACKINGSLIP_SORT_DISPLAY
NOTIFY_ADMIN_PACKINGSLIP_SPLIT_PRODUCTS
NOTIFY_ADMIN_PROD_LISTING_ADD_ICON
NOTIFY_ADMIN_PROD_LISTING_ADD_ICON_CATEGORY
NOTIFY_ADMIN_PROD_LISTING_DATA_AFTER_QTY
NOTIFY_ADMIN_PROD_LISTING_DATA_B4_QTY
NOTIFY_ADMIN_PROD_LISTING_DEFAULT_ACTION
NOTIFY_ADMIN_PROD_LISTING_DEFAULT_INFOBOX
NOTIFY_ADMIN_PROD_LISTING_HEADERS_AFTER_QTY
NOTIFY_ADMIN_PROD_LISTING_HEADERS_B4_QTY
NOTIFY_ADMIN_PROD_LISTING_PRODUCTS_QUERY
NOTIFY_ADMIN_PROD_LISTING_SKIP_ACTIONS
NOTIFY_ADMIN_PRODUCT_ATTRIBUTES_COLLECT_INFO_EXTRA_INPUTS
NOTIFY_ADMIN_PRODUCT_COLLECT_INFO_EXTRA_INPUTS
NOTIFY_ADMIN_PRODUCT_COPY_TO_ATTRIBUTES
NOTIFY_ADMIN_PRODUCT_IMAGE_UPLOADED
NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_ABOVE
NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_BELOW
NOTIFY_ADMIN_PRODUCT_PRICE_EDIT_SECTION_TOP
NOTIFY_ADMIN_SEARCH_BOX_FORM_GROUP
NOTIFY_ADMIN_UPDATE_PRODUCT_UPDATE
NOTIFY_ADVANCED_SEARCH_RESULTS_ADDL_CLAUSE
NOTIFY_AJAX_ADMIN_NOTIFICATIONS
NOTIFY_AJAX_POSM_DEPENDENCIES_EXTENSION_INFO
NOTIFY_AJAX_POSM_DEPENDENCIES_EXTRA_INFO
NOTIFY_AJAX_POSM_DEPENDENCIES_SELECT_CLAUSE
NOTIFY_ASK_A_QUESTION_ACTION
NOTIFY_ASK_A_QUESTION_ALLOW_BYPASS_REDIRECT
NOTIFY_ASK_A_QUESTION_CAPTCHA_CHECK
NOTIFY_ATTRIBUTE_CONTROLLER_ADD_PRODUCT_ATTRIBUTES
NOTIFY_ATTRIBUTE_CONTROLLER_ADDITIONAL_ACTIONS_DROPDOWN_SUBMENU
NOTIFY_ATTRIBUTE_CONTROLLER_ADDITIONAL_ACTIONS_DROPDOWN_UPPER
NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_ALL
NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_ATTRIBUTE
NOTIFY_ATTRIBUTE_CONTROLLER_DELETE_OPTION_NAME_VALUES
NOTIFY_ATTRIBUTE_CONTROLLER_UPDATE_PRODUCT_ATTRIBUTE
NOTIFY_ATTRIBUTES_MODULE_BEFORE_ASSEMBLE_OUTPUTS
NOTIFY_ATTRIBUTES_MODULE_CHECKBOX_SELECTED
NOTIFY_ATTRIBUTES_MODULE_DEFAULT_SWITCH
NOTIFY_ATTRIBUTES_MODULE_END
NOTIFY_ATTRIBUTES_MODULE_FORMAT_VALUE
NOTIFY_ATTRIBUTES_MODULE_OPTION_BUILT
NOTIFY_ATTRIBUTES_MODULE_ORIGINAL_PRICE
NOTIFY_ATTRIBUTES_MODULE_RADIO_SELECTED
NOTIFY_ATTRIBUTES_MODULE_SALEMAKER_DISPLAY_PRICE_PERCENTAGE
NOTIFY_ATTRIBUTES_MODULE_START_OPTION
NOTIFY_ATTRIBUTES_MODULE_START_OPTIONS_LOOP
NOTIFY_BAN_CUSTOMER
NOTIFY_BEFORE_REDIRECT_ACTION_MUSIC_ARTIST
NOTIFY_BEFORE_REDIRECT_ACTION_PRODUCT
NOTIFY_BEFORE_REDIRECT_ACTION_RECORD_COMPANY
NOTIFY_BEGIN_ADMIN_CATEGORIES
NOTIFY_BEGIN_ADMIN_PRODUCTS
NOTIFY_BUILD_KEYWORD_SEARCH
NOTIFY_CART_ATTRIBUTES_PRICE_NEXT
NOTIFY_CART_ATTRIBUTES_PRICE_ONETIME_CHARGES_NEXT
NOTIFY_CART_ATTRIBUTES_PRICE_ONETIME_CHARGES_START
NOTIFY_CART_ATTRIBUTES_PRICE_START
NOTIFY_CART_ATTRIBUTES_WEIGHT_NEXT
NOTIFY_CART_ATTRIBUTES_WEIGHT_START
NOTIFY_CART_CALCULATE_ATTRIBUTE_PRICE
NOTIFY_CART_CALCULATE_ATTRIBUTE_WEIGHT
NOTIFY_CART_CALCULATE_PRODUCT_PRICE
NOTIFY_CART_GET_PRODUCTS_NEXT
NOTIFY_CART_USER_ACTION
NOTIFY_CATEGORY_ROW_IMAGE
NOTIFY_CHECK_DOWNLOAD_HANDLER
NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE
NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS
NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_TOTALS_PROCESS
NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE
NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_BEFOREPROCESS
NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL
NOTIFY_CHECKOUT_PROCESS_BEFORE_CART_RESET
NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PRE_CONFIRMATION_CHECK
NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PROCESS
NOTIFY_CHECKOUT_PROCESS_BEGIN
NOTIFY_CHECKOUT_PROCESS_HANDLE_AFFILIATES
NOTIFY_CHECKOUT_SLAMMING_ALERT
NOTIFY_CHECKOUT_SLAMMING_LOCKOUT
NOTIFY_CONTACT_US_ACTION
NOTIFY_CONTACT_US_CAPTCHA_CHECK
NOTIFY_COUPON_ADDITIONAL_CHECKS
NOTIFY_COUPON_VALIDATION_PRODUCT_RESTRICTIONS
NOTIFY_CREATE_ACCOUNT_CAPTCHA_CHECK
NOTIFY_CREATE_ACCOUNT_LOOKUP_BY_EMAIL
NOTIFY_CREATE_ACCOUNT_VALIDATION_CHECK
NOTIFY_CUSTOMER_AFTER_RECORD_DELETED
NOTIFY_CUSTOMER_CHECK_IF_BANNED
NOTIFY_CUSTOMER_DATA_LOADED
NOTIFY_CUSTOMER_IS_TAX_EXEMPT
NOTIFY_CUSTOMER_PRICING_GROUP_LOADED
NOTIFY_DATASOURCE_CONSTRUCTOR_END
NOTIFY_DATASOURCE_PROCESSREQUEST
NOTIFY_DOWNLOAD_BEFORE_START
NOTIFY_DOWNLOAD_BROWSER_DETECTION
NOTIFY_DOWNLOAD_IN_CHUNKS___COMPLETED
NOTIFY_DOWNLOAD_NO_MATCH_FOUND
NOTIFY_DOWNLOAD_READY_TO_REDIRECT
NOTIFY_DOWNLOAD_READY_TO_START
NOTIFY_DOWNLOAD_READY_TO_STREAM
NOTIFY_DOWNLOAD_VIA_SYMLINK___BEGINS
NOTIFY_DOWNLOAD_WITHOUT_REDIRECT___COMPLETED
NOTIFY_DOWNLOAD_WITHOUT_REDIRECT_VIA_CHUNKS___COMPLETED
NOTIFY_EMAIL_ADDRESS_TEST
NOTIFY_EMAIL_ADDRESS_VALIDATION_FAILURE
NOTIFY_EMAIL_AFTER_EMAIL_FORMAT_DETERMINED
NOTIFY_EMAIL_AFTER_PROCESS_ATTACHMENTS
NOTIFY_EMAIL_AFTER_SEND
NOTIFY_EMAIL_AFTER_SEND_ALL_SPECIFIED_ADDRESSES
NOTIFY_EMAIL_AFTER_SEND_WITH_ALL_PARAMS
NOTIFY_EMAIL_BEFORE_PROCESS_ATTACHMENTS
NOTIFY_EMAIL_BEGIN_ARCHIVE_WRITE
NOTIFY_EMAIL_DETERMINING_EMAIL_FORMAT
NOTIFY_EMAIL_READY_TO_SEND
NOTIFY_EMAIL_READY_WRITE_REVIEW
NOTIFY_EMAIL_VALIDATION_TEST
NOTIFY_END_EZPAGES_FOOTERBAR
NOTIFY_END_EZPAGES_HEADERBAR
NOTIFY_END_EZPAGES_SIDEBOX
NOTIFY_EZPAGES_SIDEBOX_ADDITIONS
NOTIFY_FAILURE_DURING_CREATE_ACCOUNT
NOTIFY_FOOTER_AFTER_NAVSUPP
NOTIFY_FOOTER_END
NOTIFY_FUNCTIONS_LOOKUPS_REQUIRES_ATTRIBUTES_SELECTION
NOTIFY_FUNCTIONS_LOOKUPS_REQUIRES_ATTRIBUTES_SELECTION_OTHER
NOTIFY_GET_ATTRIBUTE_DETAILS
NOTIFY_GET_ATTRIBUTE_DETAILS_BY_ID
NOTIFY_GET_CATEGORY_DESCRIPTION
NOTIFY_GET_CATEGORY_OBJECT_DETAILS
NOTIFY_GET_CUSTOMER_WHOLESALE_INFO
NOTIFY_GET_PRODUCT_ALLOW_ADD_TO_CART
NOTIFY_GET_PRODUCT_OBJECT_DETAILS
NOTIFY_GET_PRODUCT_OBJECT_DETAILS_NOT_FOUND
NOTIFY_GET_PRODUCT_QUANTITY
NOTIFY_GET_PRODUCTS_DESCRIPTION
NOTIFY_HANDLE_IMAGE
NOTIFY_HEADER_ACCOUNT_EDIT_UPDATES_COMPLETE
NOTIFY_HEADER_ACCOUNT_EDIT_VERIFY_COMPLETE
NOTIFY_HEADER_ACCOUNT_NEWSLETTER_UPDATED
NOTIFY_HEADER_ACCOUNT_PASSWORD_CHANGED
NOTIFY_HEADER_ADDRESS_BOOK_ADD_ENTRY_DONE
NOTIFY_HEADER_ADDRESS_BOOK_ADD_ENTRY_INVALID_ATTEMPT
NOTIFY_HEADER_ADDRESS_BOOK_DELETION_DONE
NOTIFY_HEADER_END_ABOUT_US
NOTIFY_HEADER_END_ACCOUNT
NOTIFY_HEADER_END_ACCOUNT_EDIT
NOTIFY_HEADER_END_ACCOUNT_HISTORY
NOTIFY_HEADER_END_ACCOUNT_HISTORY_INFO
NOTIFY_HEADER_END_ACCOUNT_NEWSLETTERS
NOTIFY_HEADER_END_ACCOUNT_NOTIFICATION
NOTIFY_HEADER_END_ACCOUNT_PASSWORD
NOTIFY_HEADER_END_ADDRESS_BOOK
NOTIFY_HEADER_END_ADDRESS_BOOK_PROCESS
NOTIFY_HEADER_END_ADVANCED_SEARCH_RESULTS
NOTIFY_HEADER_END_ASK_A_QUESTION
NOTIFY_HEADER_END_BRANDS
NOTIFY_HEADER_END_CHECKOUT_CONFIRMATION
NOTIFY_HEADER_END_CHECKOUT_PAYMENT
NOTIFY_HEADER_END_CHECKOUT_PAYMENT_ADDRESS
NOTIFY_HEADER_END_CHECKOUT_PROCESS
NOTIFY_HEADER_END_CHECKOUT_SHIPPING
NOTIFY_HEADER_END_CHECKOUT_SHIPPING_ADDRESS
NOTIFY_HEADER_END_CHECKOUT_SUCCESS
NOTIFY_HEADER_END_CONTACT_US
NOTIFY_HEADER_END_CREATE_ACCOUNT
NOTIFY_HEADER_END_CREATE_ACCOUNT_SUCCESS
NOTIFY_HEADER_END_DOCUMENT_GENERAL_INFO
NOTIFY_HEADER_END_DOCUMENT_PRODUCT_INFO
NOTIFY_HEADER_END_DOWNLOAD
NOTIFY_HEADER_END_EZPAGE
NOTIFY_HEADER_END_FEATURED_CATEGORIES
NOTIFY_HEADER_END_FEATURED_PRODUCTS
NOTIFY_HEADER_END_GV_FAQ
NOTIFY_HEADER_END_GV_SEND
NOTIFY_HEADER_END_INDEX
NOTIFY_HEADER_END_INDEX_MAIN_TEMPLATE_VARS
NOTIFY_HEADER_END_LOGIN
NOTIFY_HEADER_END_LOGIN_TIMEOUT
NOTIFY_HEADER_END_LOGOFF
NOTIFY_HEADER_END_ORDER_STATUS
NOTIFY_HEADER_END_PAGE_NOT_FOUND
NOTIFY_HEADER_END_PASSWORD_FORGOTTEN
NOTIFY_HEADER_END_PASSWORD_RESET
NOTIFY_HEADER_END_POPUP_IMAGES
NOTIFY_HEADER_END_POPUP_IMAGES_ADDITIONAL
NOTIFY_HEADER_END_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_HEADER_END_PRODUCT_INFO
NOTIFY_HEADER_END_PRODUCT_MUSIC_INFO
NOTIFY_HEADER_END_PRODUCT_REVIEWS
NOTIFY_HEADER_END_PRODUCT_REVIEWS_INFO
NOTIFY_HEADER_END_PRODUCT_REVIEWS_WRITE
NOTIFY_HEADER_END_PRODUCTS_ALL
NOTIFY_HEADER_END_PRODUCTS_NEW
NOTIFY_HEADER_END_SHOPPING_CART
NOTIFY_HEADER_END_SITE_MAP
NOTIFY_HEADER_END_SPECIALS
NOTIFY_HEADER_END_UNSUBSCRIBE
NOTIFY_HEADER_INDEX_MAIN_TEMPLATE_VARS_PAGE_BODY
NOTIFY_HEADER_INDEX_MAIN_TEMPLATE_VARS_RELEASE_PRODUCT_TYPE_VARS
NOTIFY_HEADER_SHOPPING_CART_AFTER_PRODUCTS_LOOP
NOTIFY_HEADER_SHOPPING_CART_BEFORE_PRODUCTS_LOOP
NOTIFY_HEADER_SHOPPING_CART_IN_ATTRIBUTES_LOOP
NOTIFY_HEADER_SHOPPING_CART_IN_PRODUCTS_LOOP
NOTIFY_HEADER_START_ABOUT_US
NOTIFY_HEADER_START_ACCOUNT
NOTIFY_HEADER_START_ACCOUNT_EDIT
NOTIFY_HEADER_START_ACCOUNT_HISTORY
NOTIFY_HEADER_START_ACCOUNT_HISTORY_INFO
NOTIFY_HEADER_START_ACCOUNT_NEWSLETTERS
NOTIFY_HEADER_START_ACCOUNT_NOTIFICATION
NOTIFY_HEADER_START_ACCOUNT_PASSWORD
NOTIFY_HEADER_START_ACCOUNT_PASSWORD_RESET
NOTIFY_HEADER_START_ADDRESS_BOOK
NOTIFY_HEADER_START_ADDRESS_BOOK_PROCESS
NOTIFY_HEADER_START_ADVANCED_SEARCH_RESULTS
NOTIFY_HEADER_START_ASK_A_QUESTION
NOTIFY_HEADER_START_BRANDS
NOTIFY_HEADER_START_CHECKOUT_CONFIRMATION
NOTIFY_HEADER_START_CHECKOUT_PAYMENT
NOTIFY_HEADER_START_CHECKOUT_PAYMENT_ADDRESS
NOTIFY_HEADER_START_CHECKOUT_PROCESS
NOTIFY_HEADER_START_CHECKOUT_SHIPPING
NOTIFY_HEADER_START_CHECKOUT_SHIPPING_ADDRESS
NOTIFY_HEADER_START_CHECKOUT_SUCCESS
NOTIFY_HEADER_START_CONTACT_US
NOTIFY_HEADER_START_CREATE_ACCOUNT
NOTIFY_HEADER_START_CREATE_ACCOUNT_SUCCESS
NOTIFY_HEADER_START_DOCUMENT_GENERAL_INFO
NOTIFY_HEADER_START_DOCUMENT_PRODUCT_INFO
NOTIFY_HEADER_START_DOWNLOAD
NOTIFY_HEADER_START_EZPAGE
NOTIFY_HEADER_START_FEATURED_CATEGORIES
NOTIFY_HEADER_START_FEATURED_PRODUCTS
NOTIFY_HEADER_START_GV_FAQ
NOTIFY_HEADER_START_GV_REDEEM
NOTIFY_HEADER_START_GV_SEND
NOTIFY_HEADER_START_INDEX
NOTIFY_HEADER_START_INDEX_MAIN_TEMPLATE_VARS
NOTIFY_HEADER_START_LOGIN
NOTIFY_HEADER_START_LOGIN_TIMEOUT
NOTIFY_HEADER_START_LOGOFF
NOTIFY_HEADER_START_ORDER_STATUS
NOTIFY_HEADER_START_PAGE_NOT_FOUND
NOTIFY_HEADER_START_PASSWORD_FORGOTTEN
NOTIFY_HEADER_START_POPUP_IMAGES
NOTIFY_HEADER_START_POPUP_IMAGES_ADDITIONAL
NOTIFY_HEADER_START_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_HEADER_START_PRODUCT_INFO
NOTIFY_HEADER_START_PRODUCT_MUSIC_INFO
NOTIFY_HEADER_START_PRODUCT_REVIEWS
NOTIFY_HEADER_START_PRODUCT_REVIEWS_INFO
NOTIFY_HEADER_START_PRODUCT_REVIEWS_WRITE
NOTIFY_HEADER_START_PRODUCTS_ALL
NOTIFY_HEADER_START_PRODUCTS_NEW
NOTIFY_HEADER_START_SHOPPING_CART
NOTIFY_HEADER_START_SITE_MAP
NOTIFY_HEADER_START_SPECIALS
NOTIFY_HEADER_START_UNSUBSCRIBE
NOTIFY_HTML_HEAD_CSS_BEGIN
NOTIFY_HTML_HEAD_END
NOTIFY_HTML_HEAD_JS_BEGIN
NOTIFY_HTML_HEAD_START
NOTIFY_HTML_HEAD_TAG_START
NOTIFY_INFORMATION_SIDEBOX_ADDITIONS
NOTIFY_INIT_ADD_CRUMBS_GET_TERMS_LINK_PARAMETERS
NOTIFY_INIT_CANONICAL_DEFAULT
NOTIFY_INIT_CANONICAL_FINAL
NOTIFY_INIT_CANONICAL_PARAM_WHITELIST
NOTIFY_INIT_SANITIZE_ENDS
NOTIFY_INIT_SANITIZE_GET_VAR_CHECK
NOTIFY_INIT_SANITIZE_STARTS
NOTIFY_INVOICE_ADDITIONAL_DATA_MIDDLE
NOTIFY_LANGUAGE_CHANGE_REQUESTED_BY_ADMIN_VISITOR
NOTIFY_LANGUAGE_CHANGE_REQUESTED_BY_VISITOR
NOTIFY_LOGIN_BANNED
NOTIFY_LOGIN_FAILURE
NOTIFY_LOGIN_SUCCESS
NOTIFY_LOGIN_SUCCESS_VIA_CREATE_ACCOUNT
NOTIFY_MAIN_TEMPLATE_VARS_END
NOTIFY_MAIN_TEMPLATE_VARS_END_DOCUMENT_GENERAL_INFO
NOTIFY_MAIN_TEMPLATE_VARS_END_DOCUMENT_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_END_PRODUCT_MUSIC_INFO
NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_DOCUMENT_GENERAL_INFO
NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_DOCUMENT_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_EXTRA_PRODUCT_MUSIC_INFO
NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_DOCUMENT_GENERAL_INFO
NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_DOCUMENT_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_PRODUCT_TYPE_VARS_PRODUCT_MUSIC_INFO
NOTIFY_MAIN_TEMPLATE_VARS_START
NOTIFY_MAIN_TEMPLATE_VARS_START_DOCUMENT_GENERAL_INFO
NOTIFY_MAIN_TEMPLATE_VARS_START_DOCUMENT_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_INFO
NOTIFY_MAIN_TEMPLATE_VARS_START_PRODUCT_MUSIC_INFO
NOTIFY_MODULE_ADDRESS_BOOK_ADDED_ADDRESS_BOOK_RECORD
NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_ADDRESS_BOOK_RECORD
NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_CUSTOMER_RECORD
NOTIFY_MODULE_ADDRESS_BOOK_UPDATED_PRIMARY_CUSTOMER_RECORD
NOTIFY_MODULE_CHECKOUT_ADDED_ADDRESS_BOOK_RECORD
NOTIFY_MODULE_CHECKOUT_NEW_ADDRESS_VALIDATION
NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_ADDRESS_BOOK_RECORD
NOTIFY_MODULE_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD
NOTIFY_MODULE_CREATE_ACCOUNT_ADDING_CUSTOMER_RECORD
NOTIFY_MODULE_DOWNLOAD_TEMPLATE_DETAILS
NOTIFY_MODULE_END_CHECKOUT_ADDRESS_BOOK
NOTIFY_MODULE_END_CHECKOUT_NEW_ADDRESS
NOTIFY_MODULE_END_CREATE_ACCOUNT
NOTIFY_MODULE_END_META_TAGS
NOTIFY_MODULE_META_TAGS_BUILDKEYWORDS
NOTIFY_MODULE_META_TAGS_OVERRIDE
NOTIFY_MODULE_META_TAGS_UNSPECIFIEDPAGE
NOTIFY_MODULE_PRODUCT_LISTING_RESULTCOUNT
NOTIFY_MODULE_START_CHECKOUT_NEW_ADDRESS
NOTIFY_MODULE_START_CREATE_ACCOUNT
NOTIFY_MODULE_START_HREFLANG
NOTIFY_MODULE_START_META_TAGS
NOTIFY_MODULES_ADDITIONAL_IMAGES_GET_LARGE
NOTIFY_MODULES_ADDITIONAL_IMAGES_THUMB_SLASHES
NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_END
NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_LIST
NOTIFY_MODULES_ADDITIONAL_PRODUCT_IMAGES_START
NOTIFY_MODULES_COPY_PRODUCT_CONFIRM_DUPLICATE_FIELDS
NOTIFY_MODULES_COPY_TO_CONFIRM_DUPLICATE
NOTIFY_MODULES_FEATURED_PRODUCTS_B4_LIST_BOX
NOTIFY_MODULES_MAIN_PRODUCT_IMAGE_END
NOTIFY_MODULES_MAIN_PRODUCT_IMAGE_START
NOTIFY_MODULES_NEW_PRODUCTS_B4_LIST_BOX
NOTIFY_MODULES_PRODUCT_LISTING_PRODUCTS_BUTTON
NOTIFY_MODULES_SPECIALS_INDEX_B4_LIST_BOX
NOTIFY_MODULES_UPDATE_PRODUCT_END
NOTIFY_MODULES_UPDATE_PRODUCT_START
NOTIFY_MONEYORDER_CONSTRUCTOR
NOTIFY_MORE_INFORMATION_SIDEBOX_ADDITIONS
NOTIFY_NICK_CHECK_FOR_DUPLICATE
NOTIFY_NICK_CHECK_FOR_EXISTING_EMAIL
NOTIFY_NICK_CHECK_FOR_MIN_LENGTH
NOTIFY_NICK_CREATE_NEW
NOTIFY_NICK_SET_TEMPLATE_FLAG
NOTIFY_NICK_UPDATE_EMAIL_ADDRESS
NOTIFY_OPTIMIZE_IMAGE
NOTIFY_ORDER_AFTER_ORDER_CREATE_ADD_PRODUCTS
NOTIFY_ORDER_AFTER_QUERY
NOTIFY_ORDER_AFTER_SEND_ORDER_EMAIL
NOTIFY_ORDER_BEFORE_QUERY
NOTIFY_ORDER_CART_ADD_ATTRIBUTE_LIST
NOTIFY_ORDER_CART_ADD_PRODUCT_LIST
NOTIFY_ORDER_CART_ADDRESS_OVERRIDES
NOTIFY_ORDER_CART_AFTER_ADDRESSES_SET
NOTIFY_ORDER_CART_BEGINS
NOTIFY_ORDER_CART_EXTERNAL_TAX_DURING_ORDER_CREATE
NOTIFY_ORDER_CART_EXTERNAL_TAX_RATE_LOOKUP
NOTIFY_ORDER_CART_FINISHED
NOTIFY_ORDER_CART_ORDERSTATUS
NOTIFY_ORDER_CART_SUBTOTAL_CALCULATE
NOTIFY_ORDER_COUPON_LINK
NOTIFY_ORDER_DURING_CREATE_ADD_PRODUCTS
NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_DOWNLOAD_LINE_ITEM
NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_LINE_ITEM
NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_COMMENT
NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_HEADER
NOTIFY_ORDER_DURING_CREATE_ADDED_ORDERTOTAL_LINE_ITEM
NOTIFY_ORDER_DURING_CREATE_ADDED_PRODUCT_LINE_ITEM
NOTIFY_ORDER_EMAIL_BEFORE_PRODUCTS
NOTIFY_ORDER_INSTANTIATE
NOTIFY_ORDER_INVOICE_CONTENT_FOR_ADDITIONAL_EMAILS
NOTIFY_ORDER_INVOICE_CONTENT_READY_TO_SEND
NOTIFY_ORDER_PROCESSING_ATTRIBUTES_BEGIN
NOTIFY_ORDER_PROCESSING_ATTRIBUTES_EXIST
NOTIFY_ORDER_PROCESSING_BESTSELLERS_UPDATE
NOTIFY_ORDER_PROCESSING_CREDIT_ACCOUNT_UPDATE_BEGIN
NOTIFY_ORDER_PROCESSING_ONE_TIME_CHARGES_BEGIN
NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_BEGIN
NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_END
NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_INIT
NOTIFY_ORDER_QUERY_ADD_PRODUCT
NOTIFY_ORDER_SEND_EMAIL_INITIALIZE
NOTIFY_ORDER_SEND_LOW_STOCK_EMAILS
NOTIFY_ORDER_SET_ORDER_MESSAGE
NOTIFY_ORDER_STATUS_EXTRA_VALIDATION
NOTIFY_ORDER_STATUS_SLAMMING_ALERT
NOTIFY_ORDER_STATUS_SLAMMING_LOCKOUT
NOTIFY_ORDER_STATUS_SPAM_DETECTED
NOTIFY_ORDER_STATUS_VALIDATION_CHECK
NOTIFY_ORDER_TOTAL_PRE_CONFIRMATION_CHECK_NEXT
NOTIFY_ORDER_TOTAL_PRE_CONFIRMATION_CHECK_STARTS
NOTIFY_ORDER_TOTAL_PROCESS_NEXT
NOTIFY_ORDER_TOTAL_PROCESS_STARTS
NOTIFY_OT_COUPON_CALCS_FINISHED
NOTIFY_OT_COUPON_COUPON_INFO
NOTIFY_OT_COUPON_COUPON_REMOVED
NOTIFY_OT_COUPON_CREDIT_SELECTION
NOTIFY_OT_COUPON_GENERATE_POPUP_LINK
NOTIFY_OT_COUPON_ORDER_TOTAL_FINISHED
NOTIFY_OT_COUPON_PRODUCT_VALIDITY
NOTIFY_OT_COUPON_START
NOTIFY_OT_COUPON_USES_PER_CUSTOMER_GUEST_CHECKOUT_CHECK
NOTIFY_OT_COUPON_USES_PER_USER_CHECK
NOTIFY_OT_GROUP_PRICING_DEDUCTION_OVERRIDE
NOTIFY_PAGE_BODY_BEGIN
NOTIFY_PASSWORD_FORGOTTEN_ALREADY_SENT
NOTIFY_PASSWORD_FORGOTTEN_NOT_FOUND
NOTIFY_PASSWORD_FORGOTTEN_VALIDATED
NOTIFY_PASSWORD_RESET_URL_SENT
NOTIFY_PAYMENT_AUTHNET_EMULATOR_CHECK
NOTIFY_PAYMENT_AUTHNET_ENCAPSULATION_CHECK
NOTIFY_PAYMENT_AUTHNET_MODE_SELECTION
NOTIFY_PAYMENT_AUTHNET_POSTSUBMIT_HOOK
NOTIFY_PAYMENT_AUTHNET_PRESUBMIT_HOOK
NOTIFY_PAYMENT_AUTHNETSIM_POSTPROCESS_HOOK
NOTIFY_PAYMENT_AUTHNETSIM_POSTSUBMIT_HOOK
NOTIFY_PAYMENT_AUTHNETSIM_PRESUBMIT_HOOK
NOTIFY_PAYMENT_CLASS_GET_INSTALLED_MODULES
NOTIFY_PAYMENT_MODULE_ENABLE
NOTIFY_PAYMENT_PAYPAL_CANCELLED_DURING_CHECKOUT
NOTIFY_PAYMENT_PAYPAL_INSTALLED
NOTIFY_PAYMENT_PAYPAL_RETURN_TO_STORE
NOTIFY_PAYMENT_PAYPAL_UNINSTALLED
NOTIFY_PAYMENT_PAYPALDP_INSTALLED
NOTIFY_PAYMENT_PAYPALDP_SUBTOTALS_REVIEW
NOTIFY_PAYMENT_PAYPALDP_UNINSTALLED
NOTIFY_PAYMENT_PAYPALEC_BEFORE_SETEC
NOTIFY_PAYMENT_PAYPALEC_SUBTOTALS_TAX
NOTIFY_PAYMENT_PAYPALEC_TOKEN
NOTIFY_PAYMENT_PAYPALR_INSTALLED
NOTIFY_PAYMENT_PAYPALR_UNINSTALLED
NOTIFY_PAYMENT_PAYPALWPP_INSTALLED
NOTIFY_PAYMENT_PAYPALWPP_UNINSTALLED
NOTIFY_PAYPAL_CURL_BUILDNAMEVALUELIST
NOTIFY_PAYPAL_CURL_CONSTRUCT
NOTIFY_PAYPAL_CUSTOMER_ATTEMPT_TO_USE_INVALID_COUNTRY_CODE
NOTIFY_PAYPAL_DODIRECTPAYMENT
NOTIFY_PAYPAL_DOEXPRESSCHECKOUTPAYMENT
NOTIFY_PAYPAL_EXPRESS_CHECKOUT_PAYERID_DETERMINED
NOTIFY_PAYPAL_GETEXPRESSCHECKOUTDETAILS
NOTIFY_PAYPAL_PAYLATER_MESSAGE_OBJECTS
NOTIFY_PAYPAL_PAYLATER_SELECTORS
NOTIFY_PAYPAL_SETEXPRESSCHECKOUT
NOTIFY_PAYPALEC_END_ECSTEP2
NOTIFY_PAYPALEC_PARSE_GETEC_RESULT
NOTIFY_PAYPALEXPRESS_BYPASS_ADDRESS_CREATION
NOTIFY_PAYPALEXPRESS_CREATE_ACCOUNT_ADDED_ADDRESS_BOOK_RECORD
NOTIFY_PAYPALEXPRESS_CREATE_ACCOUNT_ADDED_CUSTOMER_RECORD
NOTIFY_PAYPALIPN_STATUS_HISTORY_UPDATE
NOTIFY_PAYPALR_ADMIN_FUNDS_IN_OUT
NOTIFY_PAYPALR_BEFORE_PROCESS_FINISHED
NOTIFY_PAYPALR_FUNDS_CAPTURED
NOTIFY_PAYPALWPP_AFTER_PROCESS_FINISHED
NOTIFY_PAYPALWPP_BEFORE_DOEXPRESSCHECKOUT
NOTIFY_PAYPALWPP_BEFORE_PROCESS_FINISHED
NOTIFY_PAYPALWPP_DISABLE_GET_OVERRIDE_ADDRESS
NOTIFY_PAYPALWPP_ERROR_HANDLER
NOTIFY_PAYPALWPP_GETLINEITEMDETAILS
NOTIFY_PLUGINMANAGER_DO_CLEANUP
NOTIFY_PLUGINMANAGER_DO_DISABLE
NOTIFY_PLUGINMANAGER_DO_ENABLE
NOTIFY_PLUGINMANAGER_DO_UNINSTALL
NOTIFY_PLUGINMANAGER_DO_UPGRADE
NOTIFY_POSM_ADD_PRODUCT_OPTION
NOTIFY_POSM_DEPENDENCIES_ENABLE_OVERRIDE
NOTIFY_POSM_EO_PRODUCT_ADDED_STOCK_UPDATE
NOTIFY_POSM_EO_PRODUCT_CHANGED_STOCK_UPDATE
NOTIFY_POSM_INSERT_HEAD
NOTIFY_POSM_LOWER_HEADING_INSERT_AFTER_QTY
NOTIFY_POSM_LOWER_HEADING_INSERT_B4_QTY
NOTIFY_POSM_REMOVE_OPTIONS
NOTIFY_POSM_SET_INSTRUCTIONS
NOTIFY_POSM_SET_UPDATE_BUTTON_PARAMETERS
NOTIFY_POSM_START_HTML_OUTPUT
NOTIFY_POSM_UPDATE_PREPARE_INPUTS
NOTIFY_POSM_UPPER_CONTENT_INSERT
NOTIFY_POSM_UPPER_HEADING_INSERT
NOTIFY_POSM_VIEW_ALL_INSERT_DATA
NOTIFY_POSM_VIEW_ALL_INSERT_HEAD
NOTIFY_POSM_VIEW_ALL_START_BODY
NOTIFY_POSM_VIEW_ALL_TABLE_HEADING
NOTIFY_POSM_VIEW_ALL_UPDATE
NOTIFY_POSM_VIEW_ALL_UPDATE_INIT
NOTIFY_POSM_VIEW_ALL_UPDATE_PRODUCT
NOTIFY_PPR_LISTENER_UNKNOWN_OPERATION
NOTIFY_PROCESS_3RD_PARTY_LOGINS
NOTIFY_PRODUCT_DETAILS_NO_DESCRIPTION
NOTIFY_PRODUCT_INFO_DISPLAY_DETAILS
NOTIFY_PRODUCT_INFO_PRODUCT_STATUS_CHECK
NOTIFY_PRODUCT_LISTING_ALPHA_SORTER_SELECTLIST
NOTIFY_PRODUCT_LISTING_END
NOTIFY_PRODUCT_LISTING_QUERY_STRING
NOTIFY_PRODUCT_PREV_NEXT_OVERRIDE
NOTIFY_PRODUCT_TYPE_VARS_END_DOCUMENT_GENERAL_INFO
NOTIFY_PRODUCT_TYPE_VARS_END_DOCUMENT_PRODUCT_INFO
NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_INFO
NOTIFY_PRODUCT_TYPE_VARS_END_PRODUCT_MUSIC_INFO
NOTIFY_PRODUCT_TYPE_VARS_START_DOCUMENT_GENERAL_INFO
NOTIFY_PRODUCT_TYPE_VARS_START_DOCUMENT_PRODUCT_INFO
NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_FREE_SHIPPING_INFO
NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_INFO
NOTIFY_PRODUCT_TYPE_VARS_START_PRODUCT_MUSIC_INFO
NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR
NOTIFY_PRODUCTS_OPTIONS_STOCK_OBSERVER_INSTANTIATED
NOTIFY_QUERY_FACTORY_META_DEFAULT
NOTIFY_QUERYBUILDER_INIT_END
NOTIFY_QUERYBUILDER_INIT_START
NOTIFY_QUERYBUILDER_PREPROCESSJOINS_END
NOTIFY_QUERYBUILDER_PREPROCESSJOINS_START
NOTIFY_QUERYBUILDER_PROCESSBINDVARS_END
NOTIFY_QUERYBUILDER_PROCESSBINDVARS_START
NOTIFY_QUERYBUILDER_PROCESSGROUPBYS_END
NOTIFY_QUERYBUILDER_PROCESSGROUPBYS_START
NOTIFY_QUERYBUILDER_PROCESSJOINADDCOLUMN_ENDT
NOTIFY_QUERYBUILDER_PROCESSJOINADDCOLUMN_START
NOTIFY_QUERYBUILDER_PROCESSJOINFKEYFIELD_END
NOTIFY_QUERYBUILDER_PROCESSJOINFKEYFIELD_START
NOTIFY_QUERYBUILDER_PROCESSJOINS_END
NOTIFY_QUERYBUILDER_PROCESSJOINS_START
NOTIFY_QUERYBUILDER_PROCESSJOINSCUSTOMAND_END
NOTIFY_QUERYBUILDER_PROCESSJOINSCUSTOMAND_START
NOTIFY_QUERYBUILDER_PROCESSORDERBYS_END
NOTIFY_QUERYBUILDER_PROCESSORDERBYS_START
NOTIFY_QUERYBUILDER_PROCESSQUERY_END
NOTIFY_QUERYBUILDER_PROCESSQUERY_START
NOTIFY_QUERYBUILDER_PROCESSSELECTLIST_END
NOTIFY_QUERYBUILDER_PROCESSSELECTLIST_START
NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSE_END
NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSE_START
NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSETEST_END
NOTIFY_QUERYBUILDER_PROCESSWHERECLAUSETEST_START
NOTIFY_QUERYBUILDER_SETFINALQUERY_END
NOTIFY_QUERYBUILDER_SETFINALQUERY_START
NOTIFY_QUERYBUILDER_SETPARTS_START
NOTIFY_REDIRECT_DEFAULT_ACTION
NOTIFY_REVIEW_INSERTED_DURING_WRITE_REVIEW
NOTIFY_REVIEWS_WRITE_CAPTCHA_CHECK
NOTIFY_SEARCH_COLUMNLIST_STRING
NOTIFY_SEARCH_FROM_STRING
NOTIFY_SEARCH_LISTING_QUERY_STRING
NOTIFY_SEARCH_MATCHING_KEYWORD_FIELDS
NOTIFY_SEARCH_NO_RESULTS_MESSAGE
NOTIFY_SEARCH_ORDERBY_STRING
NOTIFY_SEARCH_REAL_ORDERBY_STRING
NOTIFY_SEARCH_RESULTS
NOTIFY_SEARCH_SELECT_STRING
NOTIFY_SEARCH_WHERE_STRING
NOTIFY_SEFU_INTERCEPT
NOTIFY_SEFU_INTERCEPT_ADMCATHOME
NOTIFY_SEFU_INTERCEPT_ADMCATHREF
NOTIFY_SEND_ADMIN_EMAIL_WRITE_REVIEW
NOTIFY_SHIPPING_CHECK_ENABLED
NOTIFY_SHIPPING_CHECK_ENABLED_FOR_ZONE
NOTIFY_SHIPPING_CLASS_GET_INSTALLED_MODULES
NOTIFY_SHIPPING_EXCLUDE_FROM_CHEAPEST
NOTIFY_SHIPPING_FLAT_UPDATE_STATUS
NOTIFY_SHIPPING_FREEOPTIONS_UPDATE_STATUS
NOTIFY_SHIPPING_FREESHIPPER_UPDATE_STATUS
NOTIFY_SHIPPING_ITEM_UPDATE_STATUS
NOTIFY_SHIPPING_MODULE_CALCULATE_BOXES_AND_TARE
NOTIFY_SHIPPING_MODULE_CALCULATE_CHEAPEST
NOTIFY_SHIPPING_MODULE_ENABLE
NOTIFY_SHIPPING_MODULE_GET_ALL_QUOTES
NOTIFY_SHIPPING_MODULE_PRE_CALCULATE_BOXES_AND_TARE
NOTIFY_SHIPPING_PERWEIGHTUNIT_UPDATE_STATUS
NOTIFY_SHIPPING_STOREPICKUP_UPDATE_STATUS
NOTIFY_SHIPPING_TABLE_UPDATE_STATUS
NOTIFY_SHIPPING_ZONES_UPDATE_STATUS
NOTIFY_SPAM_DETECTED_DURING_CREATE_ACCOUNT
NOTIFY_SPAM_DETECTED_DURING_WRITE_REVIEW
NOTIFY_SPAM_DETECTED_USING_CONTACT_US
NOTIFY_START_EZPAGES_FOOTERBAR
NOTIFY_START_EZPAGES_HEADERBAR
NOTIFY_START_EZPAGES_MOBILE
NOTIFY_START_EZPAGES_SIDEBOX
NOTIFY_TABLEVIEW_PROCESSREQUEST
NOTIFY_TEST_CAMEL_CASE
NOTIFY_TEST_DOWNLOADABLE_FILE_EXISTS
NOTIFY_TEST_SNAKE_CASE
NOTIFY_TEST_UPDATE
NOTIFY_TPL_COLUMNAR_DISPLAY_END
NOTIFY_TPL_COLUMNAR_DISPLAY_START
NOTIFY_TPL_TABULAR_DISPLAY_END
NOTIFY_TPL_TABULAR_DISPLAY_START
NOTIFY_ZEN_ADDRESS_LABEL
NOTIFY_ZEN_ADMIN_INVALID_IP_DETECTED
NOTIFY_ZEN_DRAW_BUTTON
NOTIFY_ZEN_GET_BUY_NOW_BUTTON_RETURN
NOTIFY_ZEN_GET_PRODUCTS_SPECIAL_PRICE
NOTIFY_ZEN_HAS_PRODUCT_ATTRIBUTES_CHECK
NOTIFY_ZEN_HAS_PRODUCT_ATTRIBUTES_VALUES
NOTIFY_ZEN_IN_GUEST_CHECKOUT
NOTIFY_ZEN_INVALID_IP_DETECTED
NOTIFY_ZEN_IS_CURRENTLY_LOGGED_IN
NOTIFY_ZEN_IS_LOGGED_IN
NOTIFY_ZEN_REDIRECT
NOTIFY_ZEN_SOLD_OUT_IMAGE
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Dev: Observer/Notifier System</title>
      <link>https://docs.zen-cart.com/dev/architecture/notifiers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/notifiers/</guid>
      <description>
        
        
        &lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;One of the many goals of the Zen Cart project has always been to make it simple for third party developers to add functionality to the core code in an easy and unobtrusive manner. To do this we use the &lt;a href=&#34;https://docs.zen-cart.com/user/template/template_overrides/&#34;&gt;override system&lt;/a&gt;, the &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/inclusion/&#34;&gt;auto inclusion system&lt;/a&gt; and the observer/notifier system.&lt;/p&gt;
&lt;p&gt;The observer/notifier system is an implementation of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern&#34;&gt;&amp;ldquo;pub-sub&amp;rdquo; pattern&lt;/a&gt;  that was introduced to give developers deep access to core operation without the need to touch any core files at all. Although the implementation was written for an object-oriented code base, it can also be used with procedural code.&lt;/p&gt;
&lt;p&gt;At a high level, a developer will do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;identify an &lt;em&gt;event&lt;/em&gt; that they want to monitor, such as when a customer has just successfully logged in.&lt;/li&gt;
&lt;li&gt;register an observer to be notified when that event occurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If/when that event occurs, the &lt;code&gt;base&lt;/code&gt; class receives control and looks to see if any registrations exist for the event.  If so, all registered observer-classes are called, and they perform their custom actions.&lt;/p&gt;
&lt;p&gt;Here are some &amp;lsquo;quick links&amp;rsquo; to various sections of this documentation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#triggering-event-notifications&#34;&gt;Triggering Event Notifications&lt;/a&gt;.  Identifies the mechanism used to trigger a notification.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#observing-notifications&#34;&gt;Observing Notifications&lt;/a&gt;. Identifies the mechanisms used by &lt;em&gt;event observers&lt;/em&gt; to perform their customizations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#loading-your-observer-class&#34;&gt;Loading Your Observer Class&lt;/a&gt;.  Identifies how to load your observer-class so that it can begin its observations.  You may choose between &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers/#auto-loaded-observers&#34;&gt;automatic loading&lt;/a&gt; and &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers/#manually-loaded-observers&#34;&gt;manual loading&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#advanced-topics&#34;&gt;Advanced Topics&lt;/a&gt;. This section identifies additional methods that can be used to auto-load an observer-class and create event-specific event-handlers.&lt;/p&gt;
&lt;p&gt;a. &lt;a href=&#34;#event-specific-update-methods&#34;&gt;Event-Specific Update Methods&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;b. &lt;a href=&#34;#generic-formal-parameter-interpretation&#34;&gt;Generic Formal Parameter Interpretation&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#additional-information&#34;&gt;Additional Information&lt;/a&gt;.  This section has references to additional documentation on the observer/notifier system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#complete-examples&#34;&gt;Complete Examples&lt;/a&gt; This section shows examples of using notifiers and observers.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;triggering-event-notifications&#34;&gt;Triggering Event Notifications&lt;/h2&gt;
&lt;p&gt;The point of the observer/notifier system is to enable developers to write code that listens for certain events to happen and then perform a customized action at that point in the code execution flow.&lt;/p&gt;
&lt;p&gt;Event names are strings and are triggered via a &lt;code&gt;notify&lt;/code&gt; function.  You can see a &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers_list/&#34;&gt;list of notifiers&lt;/a&gt; in the Zen Cart core code for reference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Plugins (Zen Cart extensions) can also trigger notifier events.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;notify&lt;/code&gt; method takes the following inputs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;Input Name&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;Required?&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;$eventId&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td&gt;The string &amp;rsquo;name&amp;rsquo; of the event, e.g. &lt;code&gt;NOTIFIER_CART_ADD_CART_END&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;$param1&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;No&lt;/td&gt;
&lt;td&gt;A read-only variable, the format of which varies by the &lt;code&gt;$eventId&lt;/code&gt;.  Defaults to an empty array.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;$param2 &amp;hellip; $param9&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;No&lt;/td&gt;
&lt;td&gt;A collection of read-write variables, passed as a reference.  The code that passes these variables is giving permission for an observer to update these variables.  Each variable&amp;rsquo;s format (and presence) varies by the &lt;code&gt;$eventId&lt;/code&gt; and defaults to &lt;code&gt;null&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;class-based-event-notifications&#34;&gt;Class-Based Event Notifications&lt;/h4&gt;
&lt;p&gt;Within a class that extends the Zen Cart &lt;code&gt;base&lt;/code&gt; class, e.g.:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;shopping_cart&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;… events can be triggered via the &lt;code&gt;$this&lt;/code&gt; keyword:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;notify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;EVENT_NAME&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For example, the shopping cart class triggers this event after an item has been added to the cart:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;notify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFIER_CART_ADD_CART_END&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When a class triggers a notification using the &lt;code&gt;$this&lt;/code&gt; keyword, &lt;em&gt;all&lt;/em&gt; &lt;strong&gt;public&lt;/strong&gt; class-variables are available for use by a watching observer.  If a class desires to trigger a notification without that access, the global &lt;code&gt;$zco_notifier&lt;/code&gt; can be used to trigger that notification.&lt;/p&gt;
&lt;h4 id=&#34;procedural-event-notifications&#34;&gt;Procedural Event Notifications&lt;/h4&gt;
&lt;p&gt;In procedural application code (actually, in any code that is not inside a class which &lt;code&gt;extends base&lt;/code&gt;), use the global &lt;code&gt;$zco_notifier&lt;/code&gt; object to trigger events.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;zen_mail&lt;/code&gt; function triggers the following event, which allows a plugin to update the to-be-sent email format:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$zco_notifier&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;notify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_EMAIL_DETERMINING_EMAIL_FORMAT&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$to_email_address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$customers_email_format&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$module&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;observing-notifications&#34;&gt;Observing Notifications&lt;/h2&gt;
&lt;h3 id=&#34;writing-observer-classes&#34;&gt;Writing Observer Classes&lt;/h3&gt;
&lt;p&gt;To take advantage of notifiers, developers need to write classes to watch for them, i.e. &lt;em&gt;observe&lt;/em&gt;.  There&amp;rsquo;s even a nice directory, &lt;code&gt;includes/classes/observers&lt;/code&gt; and &lt;code&gt;admin/includes/classes/observers&lt;/code&gt;, where developers can put these classes.&lt;/p&gt;
&lt;p&gt;There are three &lt;em&gt;base-class&lt;/em&gt; methods that observers use to provide their custom actions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#attach&#34;&gt;&lt;code&gt;attach&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This method identifies a list of event(s) that the observer-class &lt;em&gt;is&lt;/em&gt; interested in monitoring.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#update&#34;&gt;&lt;code&gt;update&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This method is the call-back when an event &amp;lsquo;fires&amp;rsquo;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#detach&#34;&gt;&lt;code&gt;detach&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This method identifies a list of event(s) that the observer-class &lt;em&gt;is no longer&lt;/em&gt; interested in monitoring.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;attach&#34;&gt;attach&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;attach&lt;/code&gt;  method is used by an &lt;em&gt;event observer&lt;/em&gt; to &amp;lsquo;register&amp;rsquo; to receive control when a specified event (or list of events) occurs.  This method takes two parameters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$observer&lt;/code&gt;.  Identifies &amp;lsquo;who&amp;rsquo; is requesting to receive control, i.e. &lt;code&gt;$this&lt;/code&gt; which identifies the current class.  This value is used by the &lt;code&gt;base&lt;/code&gt; class to create a unique ID associated with the observation request (just used internally, you don&amp;rsquo;t need to worry about that unique ID).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$eventIDArray&lt;/code&gt;.  A simple array of event names that the observer-class is listening for (&amp;lsquo;observing&amp;rsquo;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example, &lt;code&gt;/includes/classes/observers/class.products_viewed_counter.php&lt;/code&gt; requests to be notified whenever the event &lt;code&gt;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&lt;/code&gt; is triggered by attaching to that event. That event is then triggered in application code by the various product types&amp;rsquo; &lt;code&gt;main_template_vars.php&lt;/code&gt; modules, causing the observer class to respond as described in the &lt;em&gt;update&lt;/em&gt; section below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;products_viewed_counter&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;attach&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;update&#34;&gt;update()&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;update&lt;/code&gt; method is used by an &lt;em&gt;event observer&lt;/em&gt; to perform event-specific actions when an event is triggered.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/em&gt;: If you find &lt;code&gt;update&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; being triggered by an event as expected, ensure your class is being instantiated &lt;strong&gt;before&lt;/strong&gt; the notifier event. Auto-loaded observers are loaded at breakpoint 175. For earlier instantiation, the observer must be manually loaded, see &lt;a href=&#34;#choosing-when-to-load-an-observer&#34;&gt;Choosing When to Load an Observer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;update&lt;/code&gt; method may be passed &lt;em&gt;up to&lt;/em&gt; 11 parameters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;$callingClass&lt;/code&gt;. This is a reference to the class in which the event occurred.  If the event is triggered by a class other than the &lt;code&gt;base&lt;/code&gt; (e.g. the &lt;code&gt;order&lt;/code&gt; or &lt;code&gt;shopping_cart&lt;/code&gt; class), then this variable can be used to manipulate any &lt;em&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/em&gt; properties within the calling class. (eg: if the event is called from the &lt;code&gt;order&lt;/code&gt; class, then inside the observer you would refer to the &lt;code&gt;order&lt;/code&gt; class&amp;rsquo;s &lt;code&gt;$this-&amp;gt;info&lt;/code&gt; property using &lt;code&gt;$class-&amp;gt;info&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$eventID&lt;/code&gt;. The name of the event triggered.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$param1&lt;/code&gt;.  &lt;em&gt;Read-only&lt;/em&gt; data.  The value is dependent on the &lt;code&gt;$eventID&lt;/code&gt;.  Sometimes named &lt;code&gt;$paramsArray&lt;/code&gt; if it&amp;rsquo;s an array rather than a single value.&lt;br&gt;
Note that if you are type-hinting your code/parameters, the type of variable being passed may vary per notifier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;$param2&lt;/code&gt; through &lt;code&gt;&amp;amp;$param9&lt;/code&gt;.  &lt;em&gt;Updateable&lt;/em&gt; variables provided by the code triggering the event. These values are dependent on the &lt;code&gt;$eventID&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/em&gt;: Instead of the generic &lt;code&gt;update()&lt;/code&gt; method that fires irrespective of which eventID was triggered, you can also choose to use &lt;a href=&#34;#event-specific-update-methods&#34;&gt;event-specific update-methods&lt;/a&gt; to handle event-related processing.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the full implementation for &lt;code&gt;/includes/classes/observers/class.products_viewed_counter.php&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;products_viewed_counter&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;attach&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;update&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$class&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$eventID&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$eventID&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;     &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;defined&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;LEGACY_PRODUCTS_VIEWED_COUNTER&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;LEGACY_PRODUCTS_VIEWED_COUNTER&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;global&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$db&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;$sql&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;UPDATE &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;TABLE_PRODUCTS_DESCRIPTION&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                SET   products_viewed = products_viewed+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                WHERE products_id = &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$paramsArray&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                AND   language_id = &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$_SESSION&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;languages_id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;$res&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$db&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;Execute&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$sql&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the &lt;code&gt;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&lt;/code&gt; event is triggered (and the shown defined constant is set to &amp;lsquo;on&amp;rsquo;), the &lt;code&gt;$paramsArray&lt;/code&gt; parameter is &lt;em&gt;expected to be&lt;/em&gt; an integer value that identifies the specific product to be updated.  The observer&amp;rsquo;s &lt;code&gt;update&lt;/code&gt; method thus casts that &lt;code&gt;$paramsArray&lt;/code&gt; parameter to an integer value and performs the &lt;code&gt;products_viewed&lt;/code&gt; update.&lt;/p&gt;
&lt;h4 id=&#34;detach&#34;&gt;detach()&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;detach&lt;/code&gt; method is used by an &lt;em&gt;event observer&lt;/em&gt; to &amp;lsquo;un-register&amp;rsquo; from receiving specified event (or list of events) notifications.  This method takes two parameters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$observer&lt;/code&gt;.  Identifies &amp;lsquo;who&amp;rsquo; is requesting to receive control, i.e. &lt;code&gt;$this&lt;/code&gt; which identifies the current class.  This value should be the same as that used to &lt;code&gt;attach&lt;/code&gt; to the no-longer-wanted event.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$eventIDArray&lt;/code&gt;.  A simple array of event names that the observer-class is no longer &amp;lsquo;interested in&amp;rsquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While seldom used, here&amp;rsquo;s one way it might be used: If, for instance, an observer was interested in the &lt;em&gt;first&lt;/em&gt; triggering of a given notification, the observer&amp;rsquo;s &lt;code&gt;update&lt;/code&gt; method, upon receiving that notification, could trigger the associated &lt;code&gt;detach&lt;/code&gt; so listening stops.&lt;/p&gt;
&lt;h2 id=&#34;loading-your-observer-class&#34;&gt;Loading Your Observer-Class&lt;/h2&gt;
&lt;p&gt;Observers may be loaded automatically or manually.  Automatic loading is less work for plugin authors, but offers less flexibility in terms of load-order which can sometimes interfere with required dependencies.&lt;/p&gt;
&lt;h3 id=&#34;choosing-when-to-load-an-observer&#34;&gt;Choosing &amp;ldquo;When&amp;rdquo; to Load an Observer&lt;/h3&gt;
&lt;p&gt;If your observer-class performs actions &lt;em&gt;prior to&lt;/em&gt; the page-specific loading (e.g. monitoring for cart-related actions), you&amp;rsquo;ll need to make sure that your observer is loaded and instantiated &lt;em&gt;&lt;strong&gt;before&lt;/strong&gt;&lt;/em&gt; any watched-for notifier is triggered in application code.  In these cases, review the base Zen Cart auto-loader (&lt;code&gt;[/admin]/includes/auto_loaders/config.core.php&lt;/code&gt;) to identify the load-point required.&lt;/p&gt;
&lt;h3 id=&#34;auto-loaded-observers&#34;&gt;Auto-loaded Observers&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re developing a plugin that uses an Observer class you might wish to utilize auto loading and instantiating of observers. These auto-instantiated Observers will be loaded near the end of the list of load-points, so typically all dependencies will already be available. This works great in the vast majority of cases, and makes your Observer less brittle and easier to maintain across Zen Cart version upgrades.&lt;/p&gt;
&lt;p&gt;By following a naming convention Zen Cart will both load and instantiate your Observer class automatically. Here are the requirements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The file is in the &lt;code&gt;/includes/classes/observers&lt;/code&gt; sub-directory and named like: &lt;code&gt;auto.your_plugin.php&lt;/code&gt;. Note the &lt;strong&gt;auto.&lt;/strong&gt; prefix.  All files in this directory that start with &lt;strong&gt;auto.&lt;/strong&gt; will be included (i.e. loaded).&lt;/li&gt;
&lt;li&gt;The file defines a class named &lt;strong&gt;zcObserver&lt;/strong&gt; + the &lt;a href=&#34;http://en.wikipedia.org/wiki/CamelCase&#34;&gt;CamelCased&lt;/a&gt; filename with no underscores. For example, a file named &lt;code&gt;auto.your_plugin.php&lt;/code&gt; will contain a class named  &lt;code&gt;zcObserverYourPlugin&lt;/code&gt;.  (For debugging assistance, a myDEBUG*.log file will be generated if a properly-named file is loaded, but the class name doesn&amp;rsquo;t conform to these rules.)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;   class zcObserverYourPlugin extends base { 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This technique will work so long as your class doesn&amp;rsquo;t have any special requirements on its load point (auto-loaded classes are loaded at point &lt;code&gt;175&lt;/code&gt;, after all other system dependencies are loaded). Most observers won&amp;rsquo;t need to be loaded &amp;ldquo;before&amp;rdquo; all other regular dependencies, so load-point 175 is fine in most cases. If your observer needs to be loaded earlier, then don&amp;rsquo;t use this special naming convention, but instead manual loading, which is described below.   An example of a notifier whose observer should not use auto loading is ZEN_GET_PRODUCTS_STOCK.  This fires from the shopping cart class, which has a load point of 80.  If you need to observe this notifier, you will want to load earlier than 80.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Auto loading has been available on the storefront side since Zen Cart 1.5.3, and on the admin side since Zen Cart 1.5.7.  For versions prior to that you can use the Manually-loaded option below.  Alternately, to backport admin side autoloading to 1.5.6, see &lt;a href=&#34;https://github.com/zencart/zencart/commit/bc195baf258c11b73f29de41020e1c0505e4d462&#34;&gt;this PR&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;changing-a-manually-loaded-observer-to-use-auto-loading&#34;&gt;Changing a Manually-loaded Observer to use Auto Loading&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;Products Viewed Counter&lt;/em&gt; described &lt;a href=&#34;#update&#34;&gt;above&lt;/a&gt; could provide the same functionality and not need its auto-loader component if the observer-class file was renamed to &lt;code&gt;/includes/classes/observers/auto.products_viewed_counter.php&lt;/code&gt; and its class name was updated to be &lt;code&gt;zcObserverProductsViewedCounter.php&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;manually-loaded-observers&#34;&gt;Manually-loaded Observers&lt;/h3&gt;
&lt;p&gt;For manually-instantiating Observers at customized load-points, you must provide at least &lt;em&gt;&lt;strong&gt;two&lt;/strong&gt;&lt;/em&gt; files in your plugin&amp;rsquo;s distribution to get that class loaded and instantiated:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;/includes/auto_loaders/config.your_plugin.php&lt;/li&gt;
&lt;li&gt;/includes/classes/observers/class.your_plugin.php&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To load and create an &amp;lsquo;instance&amp;rsquo; of your observer-class so that it is operational, you&amp;rsquo;ll create a file in the Zen Cart &lt;code&gt;/includes/auto_loaders&lt;/code&gt; (or &lt;code&gt;/admin/includes/auto_loaders&lt;/code&gt;) sub-directory to perform those tasks.&lt;/p&gt;
&lt;p&gt;For the example used above, that was the file named &lt;code&gt;/includes/auto_loaders/config.your_plugin.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The file contains two auto-load statements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;An &lt;code&gt;autoType&lt;/code&gt; of &lt;code&gt;class&lt;/code&gt; to load your observer&amp;rsquo;s class-file.&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;autoType&lt;/code&gt; of &lt;code&gt;classInstantiate&lt;/code&gt; to create an instance of your observer-class.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &amp;rsquo;load-point&amp;rsquo;, in this example &lt;code&gt;200&lt;/code&gt; indicates the &lt;em&gt;relative&lt;/em&gt; position within the auto-loading process at which the auto-load actions are to be performed.  Most observers can safely load at load-point &lt;code&gt;200&lt;/code&gt; or later (after all the base Zen Cart auto-loaders have completed).  See &lt;a href=&#34;#choosing-when-to-load-an-observer&#34;&gt;Choosing When to Load an Observer&lt;/a&gt; for some special cases.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;defined&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;IS_ADMIN_FLAG&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;die&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Illegal Access&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$autoLoadConfig&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;][]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;autoType&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;// the filename, relative to the `classes` folder:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;loadFile&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;observers/class.your_plugin.php&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;$autoLoadConfig&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;][]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;autoType&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;classInstantiate&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;// the name of the class as declared inside the observer class file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;className&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;your_plugin&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;// the name of the global object into which the class is instantiated
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;objectName&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;your_plugin&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;advanced-topics&#34;&gt;Advanced Topics&lt;/h2&gt;
&lt;h3 id=&#34;shared-logic-for-multiple-events&#34;&gt;Shared Logic For Multiple Events&lt;/h3&gt;
&lt;p&gt;Given that the Observer class is indeed a class, you can break out your processing logic into many smaller discrete functions for individual purposes.
This allows you to call that private/protected function from within multiple event-specific functions, without having to duplicate code.
Pairing that with meaningful function names increases readability and comprehension of what&amp;rsquo;s happening where.&lt;/p&gt;
&lt;p&gt;Examples: a function for doing some specific debug-logging logic, called by multiple events. Or a function for parsing/cleaning input data. Or a function for writing specific db updates that happen in multiple scenarios.&lt;/p&gt;
&lt;h3 id=&#34;event-specific-update-methods&#34;&gt;Event-Specific Update Methods&lt;/h3&gt;
&lt;p&gt;Problem: If in one Observer class you attach to a number of different events, a single &lt;code&gt;update&lt;/code&gt; function will fire for all of those events &amp;hellip; but that means it will likely be receiving different function parameters depending on which event was triggered.&lt;/p&gt;
&lt;p&gt;Solution: Your observer&amp;rsquo;s &lt;code&gt;update&lt;/code&gt; method can be split out into multiple functions that are customized based on the notification received, thus also easily interpreting the passed parameters coming from where that notification was triggered.&lt;/p&gt;
&lt;p&gt;So rather than use one &lt;code&gt;update&lt;/code&gt; method, create separate methods to receive each type of event, as follows.&lt;/p&gt;
&lt;p&gt;There are two syntaxes supported for this. The &lt;code&gt;update&lt;/code&gt; method will only be called if neither of these other syntaxes are found:&lt;/p&gt;
&lt;h4 id=&#34;snake_cased-event-name&#34;&gt;snake_cased event name&lt;/h4&gt;
&lt;p&gt;This is supported since v1.5.7.&lt;/p&gt;
&lt;p&gt;If the notifier begins with &lt;code&gt;NOTIFY_&lt;/code&gt; or &lt;code&gt;NOTIFIER_&lt;/code&gt; then your observer class&amp;rsquo;s function can use the same name.&lt;/p&gt;
&lt;p&gt;Example: For a notifier named &lt;code&gt;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&lt;/code&gt; you could have a function in your observer class named &lt;code&gt;notify_product_views_hit_incrementor()&lt;/code&gt; instead of &lt;code&gt;update()&lt;/code&gt; (and still specify all the same parameters as you would for an &lt;code&gt;update()&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;This has the added benefit of being searchable just like the notifier event name (albeit lowercase).&lt;/p&gt;
&lt;p&gt;Alternatively, or for older versions, use the camelCased convention described below:&lt;/p&gt;
&lt;h4 id=&#34;camelcased-event-name&#34;&gt;camelCased event name&lt;/h4&gt;
&lt;p&gt;With this alternative syntax, the &lt;code&gt;update&lt;/code&gt; method&amp;rsquo;s name consists of the word &lt;code&gt;update&lt;/code&gt; followed by the &lt;a href=&#34;http://en.wikipedia.org/wiki/CamelCase&#34;&gt;CamelCased&lt;/a&gt; version of the watched-for notification.  For instance, the Products Viewed Counter described &lt;a href=&#34;#update&#34;&gt;above&lt;/a&gt; could be recoded as an auto-loading, customized-method observer:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;zcObserverProductsViewedCounter&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;base&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;__construct&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;attach&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$this&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;array&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;updateNotifyProductViewsHitIncrementor&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$class&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$eventID&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$products_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;defined&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;LEGACY_PRODUCTS_VIEWED_COUNTER&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;LEGACY_PRODUCTS_VIEWED_COUNTER&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;global&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$db&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000&#34;&gt;$sql&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;UPDATE &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;TABLE_PRODUCTS_DESCRIPTION&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                    SET products_viewed = products_viewed+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                  WHERE products_id = &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$products_id&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                    AND language_id = &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$_SESSION&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;languages_id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;                  LIMIT 1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#000&#34;&gt;$db&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;Execute&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$sql&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;generic-formal-parameter-interpretation&#34;&gt;Generic Formal Parameter Interpretation&lt;/h3&gt;
&lt;p&gt;If you choose not to use event-specific &amp;ldquo;update&amp;rdquo; function names, then in order for your Observer to respond to the varying $parameters received when triggered, you will need to do some special treatment based on the &lt;code&gt;$eventID&lt;/code&gt; that was triggered.&lt;/p&gt;
&lt;p&gt;The following approach is a way to trick the update method into &amp;ldquo;interpreting&amp;rdquo; the parameters using a switch statement according to the specific eventID being passed.&lt;/p&gt;
&lt;p&gt;For the procedural-coding thinker, this switch-case approach allows the same code to be used for multiple notifiers if you are also using event-specific methods in the same file.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example from the &lt;a href=&#34;https://docs.zen-cart.com/user/orders/edit_orders/&#34;&gt;Edit Orders&lt;/a&gt; plugin.  Each of the monitored events uses different parameters, so the formal parameters used in the &lt;code&gt;update&lt;/code&gt; function declaration are generic.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    public function update(&amp;amp;$class, $eventID, $p1, &amp;amp;$p2, &amp;amp;$p3, &amp;amp;$p4, &amp;amp;$p5) 
    {
        switch ($eventID) {
            // -----
            // Triggered during the orders-listing sidebar generation, after the upper button-list has been created.
            //
            // $p1 ... Contains the current $oInfo object, which contains the orders-id.
            // $p2 ... A reference to the current $contents array; the NEXT-TO-LAST element has been updated
            //         with the built-in button list.
            //
            case &amp;#39;NOTIFY_ADMIN_ORDERS_MENU_BUTTONS&amp;#39;: 
                if (is_object($p1)) {
                    $index_to_update = count($p2) - 2;
                    $p2[$index_to_update][&amp;#39;text&amp;#39;] = $this-&amp;gt;addEditOrderButton($p1-&amp;gt;orders_id, $p2[$index_to_update][&amp;#39;text&amp;#39;]);
                }
                break;
      
            // -----
            // Triggered during the orders-listing sidebar generation, after the lower-button-list has been created.
            //
            // $p1 ... Contains the current $oInfo object (could be empty), containing the orders-id.
            // $p2 ... A reference to the current $contents array; the LAST element has been updated
            //         with the built-in button list.
            //
            case &amp;#39;NOTIFY_ADMIN_ORDERS_MENU_BUTTONS_END&amp;#39;:
                if (is_object($p1) &amp;amp;&amp;amp; count($p2) &amp;gt; 0) {
                    $index_to_update = count($p2) - 1;
                    $p2[$index_to_update][&amp;#39;text&amp;#39;] = $this-&amp;gt;addEditOrderButton($p1-&amp;gt;orders_id, $p2[$index_to_update][&amp;#39;text&amp;#39;]);
                }
                break;
                
            // -----
            // Triggered during the orders-listing generation for each order, gives us a chance to add the icon to
            // quickly edit the associated order.
            //
            // $p1 ... An empty array
            // $p2 ... A reference to the current order&amp;#39;s database fields array.
            // $p3 ... A reference to the $show_difference variable, unused by this processing.
            // $p4 ... A reference to the $extra_action_icons variable, which will be augmented with an icon
            //         linking to this order&amp;#39;s EO processing.
            //
            case &amp;#39;NOTIFY_ADMIN_ORDERS_SHOW_ORDER_DIFFERENCE&amp;#39;:
                $p4 .= $this-&amp;gt;createEditOrdersLink($p2[&amp;#39;orders_id&amp;#39;], zen_image(DIR_WS_IMAGES . EO_BUTTON_ICON_DETAILS, EO_ICON_DETAILS), EO_ZC156_FA_ICON, false);
                break; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Some developers believe this method should not be used since it is less self-documenting than prior methods.  Others prefer it for its shorter function name when compared to the more long-winded camelCase syntax.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&lt;/h2&gt;
&lt;h3 id=&#34;event-aliasing&#34;&gt;Event Aliasing&lt;/h3&gt;
&lt;p&gt;Sometimes notifier names are changed (where triggered in application code) (because of a typo, for example, or to make them more self-documenting).  When this happens, rather than just remove the old notifier from the code base, the recommended practice since Zen Cart 1.5.7 has been to alias the old name.  This way older code which uses the old notifier name will still work. In some cases it makes perfect sense to fully remove an old notifier call. Use discretion when deciding whether to clean up after yourself or hold on for long-term backward compatibility.&lt;/p&gt;
&lt;p&gt;An example of a notifier name which has been aliased due to a typo is &lt;code&gt;NOTIFIY_ORDER_CART_SUBTOTAL_CALCULATE&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;plugins-which-support-notifier-use&#34;&gt;Plugins which support Notifier Use&lt;/h3&gt;
&lt;p&gt;Some plugins which can be helpful during development when using notifiers include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zen-cart.com/downloads.php?do=file&amp;amp;id=2273&#34;&gt;Watching Observers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zen-cart.com/downloads.php?do=file&amp;amp;id=2260&#34;&gt;Zen Cart Notifier Report&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;information-about-notifiers&#34;&gt;Information about Notifiers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers_list/&#34;&gt;list of notifiers&lt;/a&gt; for the current Zen Cart release.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifier_report/&#34;&gt;output of the Zen Cart Notifier Report&lt;/a&gt; run against the current release is provided on the docs site for easy reference by developers.&lt;/li&gt;
&lt;li&gt;You may also install the &lt;a href=&#34;https://github.com/lat9/notifier_report&#34;&gt;Notifier Report&lt;/a&gt; on your own site to get the list of notifiers for your version, which could differ from the official list if you have made changes or are not running the current version.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;complete-examples&#34;&gt;Complete Examples&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.zen-cart.com/user/shipping/exceptions/&#34;&gt;Creating an exception list for a shipping module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.zen-cart.com/user/sideboxes/add_link_information_sidebox/#using-an-observer&#34;&gt;Adding a link to the Information, More Information or EZ-Page Sidebox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Product Types</title>
      <link>https://docs.zen-cart.com/dev/architecture/product_types/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/product_types/</guid>
      <description>
        
        
        &lt;p&gt;FIXME - page needs attention&lt;/p&gt;
&lt;p&gt;A much requested feature in Zen Cart was the ability to have unique information layouts for different types of products. For example a Music Video needs to have different information stored and displayed, compared to say a Garden Bench.&lt;/p&gt;
&lt;p&gt;Previously there has been no easy way for a Zen Cart store user to do this without ripping apart the core code. The Product Type system was designed to help alleviate that problem.&lt;/p&gt;
&lt;p&gt;Throughout this mini-tutorial we will use the Music Product type
as an example. It is not in anyway meant to be an exhaustive treatise on implementing your own product type, as this will always depend on exactly what you are trying to implement.&lt;/p&gt;
&lt;p&gt;However it should provide enough of an overview to get you started. As ever our support forums at &lt;a href=&#34;https://www.zen-cart.com&#34;&gt;www.zen-cart.com&lt;/a&gt;, are always there to help you when you get stuck.&lt;/p&gt;
&lt;h2 id=&#34;database-schema&#34;&gt;Database Schema&lt;/h2&gt;
&lt;p&gt;The Product Types System uses a number of required, and some @@TODO non-required tables within the Zen Cart database. The required database tables are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PRODUCT_TYPES&lt;/li&gt;
&lt;li&gt;PRODUCT_TYPE_LAYOUT&lt;/li&gt;
&lt;li&gt;GET_TERMS_TO_FILTER&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;product_types&#34;&gt;PRODUCT_TYPES&lt;/h3&gt;
&lt;p&gt;The _PRODUCT_TYPES database is used to track base information relating to the product types currently installed. It consists of 8 fields.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;type_id&lt;/li&gt;
&lt;li&gt;type_name&lt;/li&gt;
&lt;li&gt;type_handler&lt;/li&gt;
&lt;li&gt;type_master_type&lt;/li&gt;
&lt;li&gt;allow_add_to_cart&lt;/li&gt;
&lt;li&gt;default_image&lt;/li&gt;
&lt;li&gt;date_added&lt;/li&gt;
&lt;li&gt;last_modified&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to add a new product type you need to create a new row in the table. Some sample SQL code is:&lt;/p&gt;
&lt;pre class=&#34;code&#34;&gt; INSERT INTO `product_types` (`type_id`, `type_name`, `type_handler`, `type_master_type`, `allow_add_to_cart`, 
 `default_image`, `date_added`, `last_modified`) VALUES (NULL, &#39;Products - Portrait&#39;, &#39;product_portrait&#39;, &#39;1&#39;, 
 &#39;Y&#39;, , &#39;0001-01-01 00:00:00&#39;, &#39;0001-01-01 00:00:00&#39;);
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;_type_id_&lt;/code&gt; is an auto_incrementing field and is used to cross reference the type with other Database Tables used by the PTS.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_type_name_&lt;/code&gt; is user defined, but you should try and stick with the naming conventions that the core team have decided on. For example, we have Products - General for the standard product, and Product - Music for a product type designed for Music CD&amp;rsquo;s. Then we have Document - General for a basic layout for an information only Document, and Document-Product for a Document that can be sold. These names are used in the drop down that appears in the admin product creation pages.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_type_handler_&lt;/code&gt; again is user defined and is used to build the URL to the code that actually does the work for the product type. It is best to define this similarly to the type_name. For example if the type_name is Product-Music, the type_handler would be product_music. For compatibility across operating systems you should always stick to lower case for the type_handler. More explanation will be given later as to how the type_handler is used to access the unique code for a given product type.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_type_master_type_&lt;/code&gt; is used to link product types together. This is mainly used if you want to build separate sideboxes to display a category tree of just certain product types. For example the Document types are linked so that we can provide a sidebox that can be used just to navigate categories containing Document Types.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_allow_add_to_cart_&lt;/code&gt; - provision is made with this field to create product_types that are for information purpose only, and because of that you do not want to allow the shopper to add them to the cart. The basic Document type is a good example of this.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_default_image_&lt;/code&gt; is reserved for future usage.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_date_added_&lt;/code&gt; and &lt;code&gt;_last_modified_&lt;/code&gt; are for internal code use only.&lt;/p&gt;
&lt;h3 id=&#34;product_type_layout&#34;&gt;PRODUCT_TYPE_LAYOUT&lt;/h3&gt;
&lt;p&gt;It has always been possible in Zen Cart using the admin interface to decide which elements of a product&amp;rsquo;s information are displayed. Originally this information was saved in the CONFIGURATION table. However as different product types will have differing types of information, we now use a separate table for product types.&lt;/p&gt;
&lt;p&gt;The layout of this table is similar to an entry in the configuration table. The fields are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuration_id&lt;/li&gt;
&lt;li&gt;configuration_title&lt;/li&gt;
&lt;li&gt;configuration_key&lt;/li&gt;
&lt;li&gt;configuration_value&lt;/li&gt;
&lt;li&gt;configuration_description&lt;/li&gt;
&lt;li&gt;product_type_id&lt;/li&gt;
&lt;li&gt;sort_order&lt;/li&gt;
&lt;li&gt;last_modified&lt;/li&gt;
&lt;li&gt;date_added&lt;/li&gt;
&lt;li&gt;use_function&lt;/li&gt;
&lt;li&gt;set_function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;an example here is an entry for the music product type.&lt;/p&gt;
&lt;pre&gt; INSERT INTO product_type_layout (configuration_title, configuration_key, configuration_value, 
   configuration_description, product_type_id, sort_order, set_function, date_added) 
   VALUES (&#39;Show Record Company&#39;, &#39;SHOW_PRODUCT_MUSIC_INFO_RECORD_COMPANY&#39;, &#39;1&#39;, 
   &#39;Display Record Company on Product Info 0= off 1= on&#39;, &#39;2&#39;, &#39;4&#39;, 
   &#39;zen_cfg_select_drop_down(array(array(\&#39;id\&#39;=&gt;\&#39;1\&#39;, \&#39;text\&#39;=&gt;\&#39;True\&#39;), 
   array(\&#39;id\&#39;=&gt;\&#39;0\&#39;, \&#39;text\&#39;=&gt;\&#39;False\&#39;)), &#39;, now());
&lt;/pre&gt;
&lt;p&gt;This lets the store admin decide whether the Record Company linked to the music product is shown on the product info page. Of course you would need to code the music product info page to use this value e.g.&lt;/p&gt;
&lt;pre&gt;   
if (SHOW_PRODUCT_MUSIC_INFO_RECORD_COMPANY == &#39;1&#39;) {
  ?&amp;gt;
   &amp;lt;tr&amp;gt;
     &amp;lt;td class=&#34;main&#34; align=&#34;center&#34; colspan=&#34;2&#34;&amp;gt;
       &amp;lt;?php echo sprintf(TEXT_RECORD_COMPANY_URL, zen_href_link(FILENAME_REDIRECT, &#39;action=url&amp;goto=&#39; . 
         urlencode($products_record_company_url), &#39;NONSSL&#39;, true, false)); ?&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
   &amp;lt;? php
     } // SHOW_PRODUCT_MUSIC_INFO_URL
&lt;/pre&gt;
&lt;p&gt;This is just one example, and you should look at the product info code (and associated entries in the PRODUCT_TYPE_LAYOUT table for more examples.&lt;/p&gt;
&lt;h3 id=&#34;get_terms_to_filter&#34;&gt;GET_TERMS_TO_FILTER&lt;/h3&gt;
&lt;p&gt;This table is not strictly part of the core PTS, but is used to handle new filter sideboxes.&lt;/p&gt;
&lt;p&gt;Filter sideboxes are used to filter product lists based on some variables.&lt;/p&gt;
&lt;p&gt;The main example of this is the manufacturers sidebox. This allows you to filter a product lists based on the manufacturer of the product.&lt;/p&gt;
&lt;p&gt;e.g. show all products whose manufacturer is Microsoft.&lt;/p&gt;
&lt;p&gt;The music product type adds two filter sideboxes, Record Company and Music Genre.&lt;/p&gt;
&lt;p&gt;There is only one field in this table.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;get_term_name&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;this is the name of the $_GET variable that is returned by the filter sidebox. The relevance of this will be discussed in more depth when we look at catalog side code for the PTS.&lt;/p&gt;
&lt;h2 id=&#34;admin-code&#34;&gt;Admin Code&lt;/h2&gt;
&lt;p&gt;In previous versions all code for handling adding categories/products was contained within the &lt;em&gt;admin/categories.php&lt;/em&gt; file. To accommodate the PTS this file needs to be split up.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;admin/categories.php&lt;/em&gt; now deals only with displaying and managing the category tree. It also contains the button for adding a new product. On requesting a new product categories.php will call the file [product handler].php. The [product handler] is the name stored in the product_types database table. e.g product_music.php is the admin handler for the Music Type product.&lt;/p&gt;
&lt;p&gt;This handler file is basically a skeleton and in general you can just directly copy the &lt;em&gt;product.php&lt;/em&gt; handler to your handler file. Note you will also have to create a corresponding language file.&lt;/p&gt;
&lt;p&gt;The product handler page then includes a number of needed files.&lt;/p&gt;
&lt;p&gt;The two most important are.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;admin/includes/modules/[handler_name]/collect_info.php&lt;/em&gt; &lt;em&gt;admin/includes/modules/[handler_name]/preview_info.php&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;again [handler name] is the type_handler entry in the product_types table.&lt;/p&gt;
&lt;p&gt;These two files are responsible for actually creating a new entry in the product table and as such will need the most customizing if your product type contains new fields/options for your product type.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_collect_info.php_&lt;/code&gt; contains the code that is used to collect the product details e.g.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;product name&lt;/li&gt;
&lt;li&gt;product description&lt;/li&gt;
&lt;li&gt;product price&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;_preview_info.php_&lt;/code&gt; is used to preview the created product prior to adding it to the database permanently.&lt;/p&gt;
&lt;p&gt;Within the &lt;em&gt;admin/includes/modules&lt;/em&gt; directories there are an number of other files you can override. By this I mean by adding a file of the same name to your &lt;em&gt;admin/includes/modules/[handler name]/&lt;/em&gt; directory, it will be used in preference.&lt;/p&gt;
&lt;p&gt;Those files are.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_update_product.php_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This code is used to update the various tables to actually add the product to the database. You only need to override this file if your product type requires extra fields to be added to the database.&lt;/p&gt;
&lt;p&gt;e.g the Music Type stores Genre Type, and record company in a separate table called product_music_extra, it therefore needs to add code to update.php to make sure information from collect_info.php is added to this table.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_copy_to_confirm.php_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This code is used when you ask to copy a product to a?new product. If your product type uses extra tables to store information then you need to add code here to ensure that information is copied to the new product&lt;/p&gt;
&lt;p&gt;e.g. the Music Type adds code here to make sure data in products_music_extra table is copied to the new product.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_delete_product_confirm.php_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This code is used when you delete a product. You may want to remove information stored in other tables associated with your product type here.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_move_product_confirm.php_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This code is used when moving a product between categories, in general there should be no reason to override this file as moves are done using the product_id. However someone somewhere may have use for it.&lt;/p&gt;
&lt;h2 id=&#34;catalog-code&#34;&gt;Catalog Code&lt;/h2&gt;
&lt;p&gt;The changes needed to support a product type in the catalog code are less onerous than &lt;em&gt;Admin&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In the main you only need to provide a handler page to show the product_info. To create a new product info page you must first create a new directory _/includes/modules/pages/[handler name]&lt;em&gt;info&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Initially you should copy all of the files contained within the &lt;em&gt;includes/modules/pages/product_info/&lt;/em&gt; directory into your _includes/modules/pages/[handler name]&lt;em&gt;info/&lt;/em&gt; directory.&lt;/p&gt;
&lt;p&gt;Usually the only file you will need to edit within this directory is &lt;em&gt;main_template_var.php&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;e.g. The Music Type adds code here to load information regarding Music genre, Record Company etc. from the &lt;em&gt;product_music_extra&lt;/em&gt; table.&lt;/p&gt;
&lt;p&gt;You then need to create a template for the product info page for your Product Type. The template should be placed in &lt;em&gt;includes/templates/template_default/templates&lt;/em&gt; or alternatively in &lt;em&gt;includes/templates/[your template]/templates&lt;/em&gt; if you want to keep it separate from core code.&lt;/p&gt;
&lt;p&gt;The template file should be called&lt;/p&gt;
&lt;p&gt;&lt;em&gt;tpl&lt;/em&gt;[handler name]&lt;em&gt;info_display.php&lt;/em&gt;, again [handler name] being the same as the entry in the type_handler field of the product_types table.&lt;/p&gt;
&lt;p&gt;You will of course have to adjust the template to include any extra information associated with your Product type.&lt;/p&gt;
&lt;p&gt;One important point. Within the template generally a number of constants are used to decide if a certain element is displayed. For example in the standard product info page, SHOW_PRODUCT_INFO_QUANTITY if set to 1 will display the quantity in stock. These constants are loaded from the database/product_type_layout table.&lt;/p&gt;
&lt;p&gt;It is good practice to create separate constants for each product type within this table. For example the Music type uses SHOW_PRODUCT_MUSIC_INFO_QUANTITY instead of SHOW_PRODUCT_INFO_QUANTITY. This allows admin to set the layouts of different product types separately from each other.&lt;/p&gt;
&lt;h2 id=&#34;filter-side-boxes&#34;&gt;Filter Side Boxes&lt;/h2&gt;
&lt;p&gt;One important addition to the PTS in catalog are sideboxes which can filter a product listing. You may already be familiar with this when using the Manufacturers sidebox. This allows you to restrict a product listing to a specific manufacturer.&lt;/p&gt;
&lt;p&gt;The Music type adds two additional filter sideboxes. These are Music Genre and Record Company. If you look at the code say for the Music genre sidebox in includes/modules/sideboxes/music_genre.php you can see that the ID for the music genre selected will be passed in the url as a $_GET variable called music_genre_name. In order for this to be processed correctly we need an automatic way of registering these filter terms. As mentioned earlier in the section on databases you can do this by adding the name of the filter variable to the &lt;em&gt;get_terms_to_filter&lt;/em&gt; database table.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Dev: Program Flow</title>
      <link>https://docs.zen-cart.com/dev/architecture/program_flow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.zen-cart.com/dev/architecture/program_flow/</guid>
      <description>
        
        
        &lt;p&gt;A storefront visit in Zen Cart follows an MVC style approach, albeit largely based on procedural code. The files involved are processed roughly in the order shown below.&lt;/p&gt;
&lt;h2 id=&#34;autoloading&#34;&gt;AutoLoading&lt;/h2&gt;
&lt;p&gt;At various points there may be &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/inclusion/&#34;&gt;auto-loading&lt;/a&gt; of certain files in a certain directory matching a prescribed naming convention, or all files automatically executed according to certain rules for that location.&lt;/p&gt;
&lt;p&gt;If debugging the program flow, there is a useful constant called &lt;code&gt;DEBUG_AUTOLOAD&lt;/code&gt; which will show the file loading order in the browser output if set to true:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;define&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;DEBUG_AUTOLOAD&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&#34;https://docs.zen-cart.com/user/troubleshooting/blank_page/#6-checking-file-loading&#34;&gt;Checking file loading&lt;/a&gt; for instructions on use.&lt;/p&gt;
&lt;h2 id=&#34;file-load-order&#34;&gt;File Load Order&lt;/h2&gt;
&lt;p&gt;Locations where an &amp;ldquo;override&amp;rdquo; can be used are noted with a ► symbol.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/index.php&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/includes/application_top&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/includes/local/configure.php&lt;/code&gt;, &lt;code&gt;/includes/configure.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/includes/defined_paths.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/includes/extra_configures/*.php&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;►&lt;code&gt;/includes/autoloaders/config.xxxx.php&lt;/code&gt; files (the &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/init_system/&#34;&gt;Init System&lt;/a&gt;) loads things in the order defined inside the files, which follows essentially the following order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect to database and setup caching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/includes/filenames.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/includes/database_tables.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/includes/extra_datafiles/*.php&lt;/code&gt; (usually to load extra db tablenames or custom defines)&lt;/li&gt;
&lt;li&gt;Read configuration keys from database (as set in Admin)&lt;/li&gt;
&lt;li&gt;Start gzip compression if enabled&lt;/li&gt;
&lt;li&gt;Load functions
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;functions_general&lt;/code&gt; and most other functions files, including &lt;code&gt;html_output&lt;/code&gt;, &lt;code&gt;functions_email&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/includes/functions/extra_functions/*.php&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set up and start session if valid
&lt;ul&gt;
&lt;li&gt;Check for cookie support&lt;/li&gt;
&lt;li&gt;Check to see if the customer is a spider/robot, and act accordingly&lt;/li&gt;
&lt;li&gt;SSL and IP validation checks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Instantiate &lt;code&gt;shopping_cart&lt;/code&gt; class&lt;/li&gt;
&lt;li&gt;Sanitize and validate URL parameters&lt;/li&gt;
&lt;li&gt;Language Selection&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/includes/languages/LANGUAGE/extra_definitions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Template Selection&lt;/li&gt;
&lt;li&gt;Setup currencies&lt;/li&gt;
&lt;li&gt;Enable navigation history&lt;/li&gt;
&lt;li&gt;Load MessageStack&lt;/li&gt;
&lt;li&gt;Check for “Down For Maintenance” or “Customer Not Authorized yet” status
&lt;ul&gt;
&lt;li&gt;►&lt;code&gt;/includes/init/includes/init_customer_auth.php&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Process Cart Content Adds/Update, File Uploads&lt;/li&gt;
&lt;li&gt;Process specialized functions
&lt;ul&gt;
&lt;li&gt;Who’s online detection and logging&lt;/li&gt;
&lt;li&gt;Activate and Expire any time-scheduled Banners, Specials, Features, Salemaker, Upcoming Products&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Calculate category/product path (cPath)&lt;/li&gt;
&lt;li&gt;Load category-tree class, and prepare the categories-sidebox contents&lt;/li&gt;
&lt;li&gt;Start the breadcrumb class and add current page components to it&lt;/li&gt;
&lt;li&gt;Start &lt;a href=&#34;https://docs.zen-cart.com/dev/architecture/notifiers/&#34;&gt;observer/notifier&lt;/a&gt; infrastructure&lt;/li&gt;
&lt;li&gt;Calculate and display any system error messages if relevant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/includes/modules/pages/PAGE/header_php►*.php&lt;/code&gt; files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;►loads &lt;code&gt;/languages/LANGUAGE/TEMPLATE/PAGENAME.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;update the breadcrumbs appropriate for this page&lt;/li&gt;
&lt;li&gt;(occasionally calls a specific &lt;code&gt;tpl_xxxx.php&lt;/code&gt; file, although usually things carry on through the following steps first)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;►&lt;code&gt;/includes/templates/common/html_header.php&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;HTML&amp;gt;&amp;lt;HEAD&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/includes/modules/meta_tags.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;display canonical metatag links based on language etc&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/includes/templates/TEMPLATE/CSS/style*.css&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;load jQuery from jQuery CDN&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modules/pages/PAGE/jscript*.js&lt;/code&gt; for static &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; snippets&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modules/pages/PAGE/jscript*.php&lt;/code&gt; for dynamic or conditional &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;/HEAD&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/includes/templates/common/main_template_vars.php&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prepares the content for the “center” section of the page (doesn’t display until done processing)&lt;/li&gt;
&lt;li&gt;Content is prepared from either of:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;includes/modules/pages/PAGE/main_template_vars.php&lt;/code&gt; (► and any additional files it calls)&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;includes/templates/TEMPLATE/templates/tpl_PAGE_default.php&lt;/code&gt; (this is usually also called by &lt;code&gt;main_template_vars.php&lt;/code&gt; from the line above)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;►&lt;code&gt;/includes/templates/jscript/on_load/*.js&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;loads any customized code for the “onload” parameter of the &lt;body&gt; tag which gets output in &lt;code&gt;tpl_main_page&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;►&lt;code&gt;/includes/templates/TEMPLATE/common/tpl_main_page&lt;/code&gt; (The following order is from template_default, as an example; some templates may alter this)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;BODY&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;output Banner Area 1&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/TEMPLATE/common/tpl_header.php&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Output Header rows (logo, nav bar, search box, etc)&lt;/li&gt;
&lt;li&gt;Output Banner Area 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;output Left sideboxes  (&lt;code&gt;/modules/column_left&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;output “body content” from &lt;code&gt;main_template_vars&lt;/code&gt; or &lt;code&gt;tpl_page_default&lt;/code&gt; above
&lt;ul&gt;
&lt;li&gt;Output Breadcrumbs and  Banner Area 3, and any MessageStack messages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;output Banner Area 4&lt;/li&gt;
&lt;li&gt;output Right sideboxes  (&lt;code&gt;/modules/column_right&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;►&lt;code&gt;/templates/common/tpl_footer.php&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Footer Navigation bar (including ez-pages tagged for footer)&lt;/li&gt;
&lt;li&gt;Display IP Address&lt;/li&gt;
&lt;li&gt;utput Banner Area 5&lt;/li&gt;
&lt;li&gt;►Display footer text (from language file)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Output Banner Area 6&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;/HTML&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/includes/application_bottom.php&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;close SESSION, end GZIP compression and dump buffered data to the screen, if applicable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
  </channel>
</rss>
