<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Fv1%2Fclass%2FvcCartData_Recip</id>
	<title>VbzCart/v1/class/vcCartData Recip - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Fv1%2Fclass%2FvcCartData_Recip"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/v1/class/vcCartData_Recip&amp;action=history"/>
	<updated>2026-07-26T11:57:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/v1/class/vcCartData_Recip&amp;diff=24716&amp;oldid=prev</id>
		<title>Woozle at 14:26, 28 February 2019</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/v1/class/vcCartData_Recip&amp;diff=24716&amp;oldid=prev"/>
		<updated>2019-02-28T14:26:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:26, 28 February 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;file&amp;#039;&amp;#039;&amp;#039;: {{l/project|file|cart/cart.data.fg.recip.php}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;file&amp;#039;&amp;#039;&amp;#039;: {{l/project|file|cart/cart.data.fg.recip.php}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;extends&amp;#039;&amp;#039;&amp;#039;: {{l/version|class|vcCartData_NameAddress}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;extends&amp;#039;&amp;#039;&amp;#039;: {{l/version|class|vcCartData_NameAddress}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;field creation chain&#039;&#039;&#039;:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** protected function &#039;&#039;&#039;LoadShippingFields()&#039;&#039;&#039; {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** $this-&amp;gt;&#039;&#039;&#039;InvokeNameAddressFields()&#039;&#039;&#039;;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** $this-&amp;gt;IntypeField();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** $this-&amp;gt;ShipChoiceField();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** $this-&amp;gt;DestinationMessageField();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** public function &#039;&#039;&#039;CaptureShipping()&#039;&#039;&#039; {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** $this-&amp;gt;&#039;&#039;&#039;LoadShippingFields()&#039;&#039;&#039;;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** $this-&amp;gt;ReceiveForm();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*::::&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*::::&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/v1/class/vcCartData_Recip&amp;diff=24705&amp;oldid=prev</id>
		<title>Woozle: Created page with &quot;{{page/code/class}} * &#039;&#039;&#039;file&#039;&#039;&#039;: {{l/project|file|cart/cart.data.fg.recip.php}} * &#039;&#039;&#039;extends&#039;&#039;&#039;: {{l/version|class|vcCartData_NameAddress}} &lt;source lang=php&gt; /*::::   PURPOSE...&quot;</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/v1/class/vcCartData_Recip&amp;diff=24705&amp;oldid=prev"/>
		<updated>2019-02-24T16:18:51Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{page/code/class}} * &amp;#039;&amp;#039;&amp;#039;file&amp;#039;&amp;#039;&amp;#039;: {{l/project|file|cart/cart.data.fg.recip.php}} * &amp;#039;&amp;#039;&amp;#039;extends&amp;#039;&amp;#039;&amp;#039;: {{l/version|class|vcCartData_NameAddress}} &amp;lt;source lang=php&amp;gt; /*::::   PURPOSE...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{page/code/class}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;file&amp;#039;&amp;#039;&amp;#039;: {{l/project|file|cart/cart.data.fg.recip.php}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;extends&amp;#039;&amp;#039;&amp;#039;: {{l/version|class|vcCartData_NameAddress}}&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
/*::::&lt;br /&gt;
  PURPOSE: Handles Recipient subforms:&lt;br /&gt;
    * intype (choice of existing or entered address)&lt;br /&gt;
    * if existing: choice of address&lt;br /&gt;
    * if entered: name/address&lt;br /&gt;
    * instructions&lt;br /&gt;
  FUTURE: At some point, we might want to allow recipients to have their own email addresses and phone numbers, though we don&amp;#039;t&lt;br /&gt;
    currently support that. When that happens, change this so it extends vcCartData_Contact instead of vcCartData_NameAddress.&lt;br /&gt;
*/&lt;br /&gt;
class vcCartData_Recip extends vcCartData_NameAddress {&lt;br /&gt;
&lt;br /&gt;
    const KS_INTYPE_EXISTING = &amp;#039;old&amp;#039;;&lt;br /&gt;
    const KS_INTYPE_NEWENTRY = &amp;#039;new&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    // ++ TRAIT REQUIREMENTS ++ //&lt;br /&gt;
    &lt;br /&gt;
    protected function FieldName_Prefix() {&lt;br /&gt;
	return _KSF_CART_PFX_RECIP;&lt;br /&gt;
    }&lt;br /&gt;
    protected function FieldName_forShipIntype() {&lt;br /&gt;
	return &amp;#039;intype-ship&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    protected function PrecedingLinesForTemplate() {&lt;br /&gt;
	$htName = $this-&amp;gt;FieldName_forContactName();&lt;br /&gt;
	$out = &amp;quot;\n  &amp;lt;tr&amp;gt;&amp;lt;td align=right&amp;gt;Name:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[$htName]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    protected function FollowingLinesForTemplate() {&lt;br /&gt;
	$htMsg = $this-&amp;gt;FieldName_forDestinationMessage();&lt;br /&gt;
	/* 2016-08-01 rearranging things&lt;br /&gt;
	// Main label on left, additional explanation below&lt;br /&gt;
	$out = &amp;quot;\n&amp;lt;tr&amp;gt;&amp;lt;td align=right&amp;gt;Optional&amp;lt;br&amp;gt;delivery&amp;lt;br&amp;gt;instructions:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[$htMsg]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	  .&amp;quot;\n&amp;lt;tr&amp;gt;&amp;lt;td colspan=2 align=center&amp;gt;(Any delivery instructions will be included on the shipping label or written on the package.)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	  ;&lt;br /&gt;
	*/&lt;br /&gt;
	// Main label and additional explanation above; everything centered&lt;br /&gt;
	$out = &amp;quot;\n&amp;lt;tr&amp;gt;&amp;lt;td align=center colspan=2&amp;gt;&amp;quot;&lt;br /&gt;
	  .&amp;#039;Optional delivery instructions (will be shown on the package):&amp;#039;&lt;br /&gt;
	  .&amp;quot;\n&amp;lt;br&amp;gt;[[$htMsg]]&amp;quot;&lt;br /&gt;
	  .&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
	  ;&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // -- TRAIT REQUIREMENTS -- //&lt;br /&gt;
    // ++ TRAIT OVERRIDES ++ //&lt;br /&gt;
    &lt;br /&gt;
    protected function InvokeNameAddressFields() {&lt;br /&gt;
	parent::InvokeNameAddressFields();&lt;br /&gt;
	$this-&amp;gt;IntypeField();	// also invoke intype field&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // -- TRAIT OVERRIDES -- //&lt;br /&gt;
    // ++ FIELD NAMES ++ //&lt;br /&gt;
    &lt;br /&gt;
    protected function FieldName_forDestinationMessage() {&lt;br /&gt;
	return &amp;#039;dest-msg&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    protected function FieldName_forShipChoice() {&lt;br /&gt;
	return KSF_CART_RECIP_CONT_CHOICE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // -- FIELD NAMES -- //&lt;br /&gt;
    // ++ FIELD VALUES ++ //&lt;br /&gt;
&lt;br /&gt;
    /*----&lt;br /&gt;
      NOTE: See notes for vcCartData_Buyer::Value_forBillInType()&lt;br /&gt;
      PUBLIC so Cart object can access it during conversion to Order&lt;br /&gt;
    */&lt;br /&gt;
    public function SetValue_forShipInType($s) {&lt;br /&gt;
	throw new exception(&amp;#039;2018-03-14 Is this ever called?&amp;#039;);&lt;br /&gt;
	$sfName = $this-&amp;gt;FieldName_forShipIntype();&lt;br /&gt;
	$this-&amp;gt;SetValue($sfName,$s);&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      NOTES:&lt;br /&gt;
	2018-07-12 The problem here is that we&amp;#039;re looking in the cart data (stored as a blob)&lt;br /&gt;
	  for the input type, but it hasn&amp;#039;t been stored there yet, although it is in the POST&lt;br /&gt;
	  data. QUESTION: how/where does the POST data get saved to the cart blob?&lt;br /&gt;
    */&lt;br /&gt;
    public function GetValue_forShipInType() {&lt;br /&gt;
	$sfName = $this-&amp;gt;FieldName_forShipIntype();&lt;br /&gt;
/*	echo &amp;quot;SHIP INTYPE FIELD NAME=[$sfName]&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;BLOB IS CLASS [&amp;quot;.get_class($this-&amp;gt;GetDataBlob()).&amp;#039;]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;BLOB DATA:&amp;#039;.$this-&amp;gt;GetDataBlob()-&amp;gt;Render();&lt;br /&gt;
	echo &amp;#039;POST DATA:&amp;#039;.fcArray::Render($_POST);&lt;br /&gt;
	throw new exception(&amp;#039;How do we get here?&amp;#039;); */&lt;br /&gt;
	return $this-&amp;gt;GetValue($sfName);&lt;br /&gt;
    }&lt;br /&gt;
    public function Value_forShipInType_isNew() {&lt;br /&gt;
	$sIntype = $this-&amp;gt;GetValue_forShipInType();&lt;br /&gt;
	return is_null($sIntype) || ($sIntype == KS_FORM_INTYPE_NEWENTRY);&lt;br /&gt;
    }&lt;br /&gt;
    public function GetValue_forDestinationMessage() {&lt;br /&gt;
    	$sfName = $this-&amp;gt;FieldName_forDestinationMessage();&lt;br /&gt;
	return $this-&amp;gt;GetValue($sfName);&lt;br /&gt;
    }&lt;br /&gt;
    public function GetValue_forShipChoice() {&lt;br /&gt;
	$sfName = $this-&amp;gt;FieldName_forShipChoice();&lt;br /&gt;
	return $this-&amp;gt;GetValue($sfName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // -- FIELD VALUES -- //&lt;br /&gt;
    // ++ FIELD OBJECTS ++ //&lt;br /&gt;
&lt;br /&gt;
    // NOTE: It&amp;#039;s very important that this always return the *same* object. Hence the caching.&lt;br /&gt;
    private $oField_Intype;&lt;br /&gt;
    protected function IntypeField() {&lt;br /&gt;
	if (empty($this-&amp;gt;oField_Intype)) {&lt;br /&gt;
	    $sName = $this-&amp;gt;FieldName_forShipIntype();&lt;br /&gt;
	    $oField = new fcFormField_Text(&lt;br /&gt;
	      $this-&amp;gt;FormObject(),&lt;br /&gt;
	      $sName&lt;br /&gt;
	      );&lt;br /&gt;
	    //$oField-&amp;gt;SetValue(self::KS_INTYPE_EXISTING);&lt;br /&gt;
	    &lt;br /&gt;
	    $arBtns = array(&lt;br /&gt;
		self::KS_INTYPE_EXISTING =&amp;gt; new fcInstaModeButton($sName,&amp;#039;Select a Destination&amp;#039;),&lt;br /&gt;
		self::KS_INTYPE_NEWENTRY =&amp;gt; new fcInstaModeButton($sName,&amp;#039;Enter a New Destination&amp;#039;),&lt;br /&gt;
	      );&lt;br /&gt;
	    $oCtrl = new fcFormControl_HTML_InstaMode($oField,$arBtns);&lt;br /&gt;
	    &lt;br /&gt;
	    $this-&amp;gt;oField_Intype = $oField;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return $this-&amp;gt;oField_Intype;&lt;br /&gt;
    }&lt;br /&gt;
    private $oField_DestInstrux;&lt;br /&gt;
    protected function DestinationMessageField() {&lt;br /&gt;
	if (empty($this-&amp;gt;oField_DestInstrux)) {&lt;br /&gt;
	    $oField = new fcFormField_Text(&lt;br /&gt;
	      $this-&amp;gt;FormObject(),&lt;br /&gt;
	      $this-&amp;gt;FieldName_forDestinationMessage()&lt;br /&gt;
	      );&lt;br /&gt;
&lt;br /&gt;
	    $oCtrl = new fcFormControl_HTML_TextArea($oField,array(&amp;#039;rows&amp;#039;=&amp;gt;2,&amp;#039;cols&amp;#039;=&amp;gt;60));&lt;br /&gt;
	      $oCtrl-&amp;gt;Required(FALSE);&lt;br /&gt;
	      &lt;br /&gt;
	    $this-&amp;gt;oField_DestInstrux = $oField;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return $this-&amp;gt;oField_DestInstrux;&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      NOTE: The control for this field is rendered separately, not through the Field object&amp;#039;s Control object.&lt;br /&gt;
	Maybe that should be changed later; it&amp;#039;s probably not that difficult.&lt;br /&gt;
    */&lt;br /&gt;
    private $oField_ShipChoice;&lt;br /&gt;
    protected function ShipChoiceField() {&lt;br /&gt;
	if (empty($this-&amp;gt;oField_ShipChoice)) {&lt;br /&gt;
	    $oField = new fcFormField_Num(&lt;br /&gt;
	      $this-&amp;gt;FormObject(),&lt;br /&gt;
	      $this-&amp;gt;FieldName_forShipChoice()&lt;br /&gt;
	      );&lt;br /&gt;
	    $this-&amp;gt;oField_ShipChoice = $oField;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return $this-&amp;gt;oField_ShipChoice;&lt;br /&gt;
    }&lt;br /&gt;
    protected function LoadShippingFields() {&lt;br /&gt;
	$this-&amp;gt;InvokeNameAddressFields();&lt;br /&gt;
	$this-&amp;gt;IntypeField();&lt;br /&gt;
	$this-&amp;gt;ShipChoiceField();&lt;br /&gt;
	$this-&amp;gt;DestinationMessageField();&lt;br /&gt;
&lt;br /&gt;
	// copy blob data to field objects&lt;br /&gt;
	$this-&amp;gt;FormObject()-&amp;gt;LoadFields_fromBlob();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // -- FIELD OBJECTS -- //&lt;br /&gt;
    // ++ FORM I/O ++ //&lt;br /&gt;
&lt;br /&gt;
    /*----&lt;br /&gt;
      ACTION:&lt;br /&gt;
	* Receive form data into form objects.&lt;br /&gt;
	* Note anything missing.&lt;br /&gt;
	* Store the received data in the local array.&lt;br /&gt;
	(The caller will need to retrieve the blob and save the Cart record.)&lt;br /&gt;
    */&lt;br /&gt;
    public function CaptureShipping() {&lt;br /&gt;
	// invoke controls to add them to the form&lt;br /&gt;
	//$this-&amp;gt;InvokeNameAddressFields();&lt;br /&gt;
	$this-&amp;gt;LoadShippingFields();&lt;br /&gt;
	$this-&amp;gt;ReceiveForm();&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      ACTION: Shows multiple subforms:&lt;br /&gt;
	1. If editing and logged in: controls to select OLD or NEW name/address&lt;br /&gt;
	2. entered/chosen name/address:&lt;br /&gt;
	  if OLD:&lt;br /&gt;
	    If editing, shows drop-down for name/address choice&lt;br /&gt;
	    If not editing, shows read-only name/address form&lt;br /&gt;
	  if NEW: Shows name/address form (editable or not)&lt;br /&gt;
	3. Shows special instructions control&lt;br /&gt;
	&lt;br /&gt;
	...UNLESS user is not logged in, in which case we force NEW mode&lt;br /&gt;
	  but show log-in controls.&lt;br /&gt;
    */&lt;br /&gt;
    public function RenderShipping($doEdit) {&lt;br /&gt;
	$this-&amp;gt;LoadShippingFields();&lt;br /&gt;
	if ($this-&amp;gt;AppObject()-&amp;gt;UserIsLoggedIn()) {&lt;br /&gt;
	    $sIntype = $this-&amp;gt;GetValue_forShipInType();&lt;br /&gt;
	    echo &amp;quot;SINTYPE=[$sIntype]&amp;quot;;&lt;br /&gt;
	    $doOld = ($sIntype == self::KS_INTYPE_EXISTING);&lt;br /&gt;
	    // sometimes this doesn&amp;#039;t get set automatically (BUG - TODO) ... 2016-06-19 might be fixed now; TODO: test&lt;br /&gt;
	    $this-&amp;gt;IntypeField()-&amp;gt;SetValue($sIntype);&lt;br /&gt;
	} else {&lt;br /&gt;
	    $doOld = FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	$out = NULL;&lt;br /&gt;
	if ($doOld) {&lt;br /&gt;
	    $out .= $this-&amp;gt;RenderShipping_OldMode($doEdit);&lt;br /&gt;
	} else {&lt;br /&gt;
	    $out .= $this-&amp;gt;RenderShipping_NewMode($doEdit);&lt;br /&gt;
	}&lt;br /&gt;
	$out .= $this-&amp;gt;RenderShipping_OrderInstructions($doEdit);	// special instructions for this order only&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      ACTION: Old Mode output depends on whether we&amp;#039;re editing:&lt;br /&gt;
	* if editing: show the drop-down and [Enter New Destination] button&lt;br /&gt;
	* if read-only: show the selected name/address&lt;br /&gt;
    */&lt;br /&gt;
    protected function RenderShipping_OldMode($doEdit) {&lt;br /&gt;
	if ($doEdit) {&lt;br /&gt;
	    $oUser = $this-&amp;gt;UserRecord();&lt;br /&gt;
	    // allow user to select from existing recipient profiles&lt;br /&gt;
	    $rsCusts = $oUser-&amp;gt;ContactRecords();&lt;br /&gt;
	    $htBtn = $this-&amp;gt;IntypeField()-&amp;gt;ControlObject()-&amp;gt;Render(TRUE);&lt;br /&gt;
	    if ($rsCusts-&amp;gt;RowCount() &amp;gt; 0) {&lt;br /&gt;
		$out = &lt;br /&gt;
		  &amp;#039;Choose a destination: &amp;#039;&lt;br /&gt;
		  .$rsCusts-&amp;gt;Render_DropDown_Addrs(KSF_CART_RECIP_CONT_CHOICE)&lt;br /&gt;
		  .&amp;#039; or &amp;#039;&lt;br /&gt;
//		  .&amp;#039;&amp;lt;input type=submit name=btnEnterRecip value=&amp;quot;Enter New Destination&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		  .$htBtn&lt;br /&gt;
		  ;&lt;br /&gt;
	    } else {&lt;br /&gt;
		$htCusts = &amp;#039;You currently have no shipping destinations saved in your profile. &amp;#039;&lt;br /&gt;
		  .$htBtn&lt;br /&gt;
		  ;&lt;br /&gt;
	    }&lt;br /&gt;
	} else {&lt;br /&gt;
	    // the pre-existing record values should have been copied to local data when the form was saved&lt;br /&gt;
	    $out = $this-&amp;gt;RenderNameAddress(FALSE);&lt;br /&gt;
	}&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderShipping_NewMode($doEdit) {&lt;br /&gt;
	$out = &amp;quot;\n&amp;lt;div align=center&amp;gt;&amp;quot;;&lt;br /&gt;
	if ($this-&amp;gt;AppObject()-&amp;gt;UserIsLoggedIn()) {&lt;br /&gt;
//	$test = $this-&amp;gt;IntypeField()-&amp;gt;ControlObject();&lt;br /&gt;
	    $htBtn = $this-&amp;gt;IntypeField()-&amp;gt;GetControlObject()-&amp;gt;Render(TRUE);&lt;br /&gt;
	    $out .= &amp;quot;Enter new shipping destination below or $htBtn from your profile.&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
	    // Without the complication of any other options, no real explanation is needed here.&lt;br /&gt;
	}&lt;br /&gt;
	$out .=&lt;br /&gt;
	  &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	  .$this-&amp;gt;RenderNameAddress($doEdit)&lt;br /&gt;
	  ;&lt;br /&gt;
&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderShipping_OrderInstructions($doEdit) {&lt;br /&gt;
	$out = &amp;quot;\n&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td align=right&amp;gt;&amp;quot;&lt;br /&gt;
	  ;	// TODO: writing in progress 2016-08-01&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // -- FORM I/O -- //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>