Difference between revisions of "VbzCart/v1/class/vcPageContent ckout/DoPage"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search
Line 1: Line 1:
 
{{page/code/class/method}}
 
{{page/code/class/method}}
 
==Notes==
 
==Notes==
'''2019-04-27''' I ''think'' what needs to happen is that things need to happen in the following order:
+
'''2019-05-05''' Revised order of events:
* '''detect submitted page''' - $this->GetPageKey_forData();
+
* PHASE I: receive
* '''detect requested page''' - $this->DetectPageRequest();
+
** '''detect submitted page''' - $this->GetPageKey_forData();
* '''determine page to show''' - $this->HandlePageRequest();
+
** '''load controls to receive that'''
** calculate if requested page should be displayed
+
** '''receive form data'''
* '''load all form controls needed''' to receive submitted & show display page
+
** '''save form data'''
** '''2019-04-28''' probably what needs to happen here is that we need to duplicate the logic of whatever calls {{l/version/method|vcCartDataManager|GetBuyerObject}}() et al. (currently includes capturing, rendering, and other stuff) and ''just'' create the requisite objects, don't try to use them yet.
+
*** save back to blob -- the Cart should save the blob field on return
** '''2019-05-04''' The first problem is to figure out how to make sure that this logic gets invoked during the setup events (KI_NODE_EVENT_DO_BUILDING or KI_NODE_EVENT_DO_FIGURING, not sure which is preferable)
+
* PHASE II: display
*** Seems like it ''should'' be happening in {{l/version/method|vcPageContent_ckout|OnRunCalculations}}, which ''does'' get called.
+
** '''determine page to show''' - $this->HandlePageRequest();
*** ...but we're trying to receive the form ''first'', here in {{l/version/method|vcPageContent_ckout|ProcessPage}}(), ''before'' the controls have been created...
+
*** calculate if requested page should be displayed (if any required fields are missing, can't advance)
*** ...which happens in {{l/version/method|vcPageContent_ckout|CapturePage}}, which is called before the input is processed in {{l/version/method|vcPageContent_ckout|DetectPageRequest}}() so we know which controls to create.
+
** '''load controls to display that'''
*** So CapturePage() needs to be split into two parts:
+
** '''load any saved values from blob'''
***# receive raw form data (do not load into controls; just detect request)
+
** '''display the page'''
***# load form data into control objects (which must be created first)
+
 
* '''receive submitted page''' - $this->CapturePage($oRes);
+
Old notes:
* '''process submitted page'''
+
* [[/2019-04-27]]
  
To examine -- how do the following functions intersect with the above steps?:
 
* $this->CapturePage($oRes);
 
* $this->HandlePageRequest();
 
 
==Calls==
 
==Calls==
 
* {{l/version/method|vcPageContent_ckout|OnRunCalculations}}() [protected; events system] calls...
 
* {{l/version/method|vcPageContent_ckout|OnRunCalculations}}() [protected; events system] calls...
 
** {{hilite|{{l/version/method|vcPageContent_ckout|ProcessPage}}()}} calls
 
** {{hilite|{{l/version/method|vcPageContent_ckout|ProcessPage}}()}} calls
*** {{l/version/method|vcPageContent_ckout|CapturePage}}($oRes);
 
 
*** {{l/version/method|vcPageContent_ckout|DetectPageRequest}}()
 
*** {{l/version/method|vcPageContent_ckout|DetectPageRequest}}()
 
*** {{l/version/method|vcPageContent_ckout|HandlePageRequest}}()
 
*** {{l/version/method|vcPageContent_ckout|HandlePageRequest}}()
 +
*** {{l/version/method|vcPageContent_ckout|CapturePage}}($oRes);
 
* Internal states:
 
* Internal states:
 
** {Set/Get}PageKey_Request() - the page requested by the user
 
** {Set/Get}PageKey_Request() - the page requested by the user
Line 52: Line 49:
 
$gotPgDest = FALSE;
 
$gotPgDest = FALSE;
 
$gotPgSrce = FALSE;
 
$gotPgSrce = FALSE;
 +
 +
// 2019-04-28 Should this bit be moved into HandlePageRequest()?
 
$sKey = fcHTTP::Request()->GetString(KSQ_ARG_PAGE_DEST);
 
$sKey = fcHTTP::Request()->GetString(KSQ_ARG_PAGE_DEST);
 
if (is_null($sKey)) {
 
if (is_null($sKey)) {
Line 59: Line 58:
 
    $this->SetPageKey_forShow($sKey);
 
    $this->SetPageKey_forShow($sKey);
 
}
 
}
 +
// [end of "this bit"]
  
 
// get actual page to display
 
// get actual page to display
Line 89: Line 89:
 
$this->doRefrBtn = FALSE;
 
$this->doRefrBtn = FALSE;
  
// 2019-04-21 Tentatively, this needs to happen here:
+
$this->DetectPageRequest();
 +
$this->HandlePageRequest();
 +
 
 +
// controls need to get added by this point
 +
echo 'RECEIVING FORM IN ['.$this->GetName().']<br>';
 
$oRes = $this->GetFormObject()->Receive($_POST); // returns fcFormResult
 
$oRes = $this->GetFormObject()->Receive($_POST); // returns fcFormResult
// Problem is that controls have not been added yet. (How is that not happening?)
+
 
 
 
$this->CapturePage($oRes);
 
$this->CapturePage($oRes);
$this->DetectPageRequest();
 
$this->HandlePageRequest();
 
  
 
//$this->GetSkinObject()->Content('main',$this->RenderPage());
 
//$this->GetSkinObject()->Content('main',$this->RenderPage());
 
     }
 
     }
 
</source>
 
</source>

Revision as of 11:50, 5 May 2019

Notes

2019-05-05 Revised order of events:

  • PHASE I: receive
    • detect submitted page - $this->GetPageKey_forData();
    • load controls to receive that
    • receive form data
    • save form data
      • save back to blob -- the Cart should save the blob field on return
  • PHASE II: display
    • determine page to show - $this->HandlePageRequest();
      • calculate if requested page should be displayed (if any required fields are missing, can't advance)
    • load controls to display that
    • load any saved values from blob
    • display the page

Old notes:

Calls

Code

    /*----
      PURPOSE: core form processing & page rendering
      ACTIONS:
	* dispatches to ParseInput_Login() & HandleInput_Login() to render/handle login controls
	* logs a Cart event to record which page was displayed
	* sets PageKey_forShow()
	* dispatches to RenderPage() to render the page
      HISTORY:
	2018-07-21
	  * ParseInput_Login() and HandleInput_Login() were defined in files which have now
	    been removed from VbzCart. This *should* now be handled automatically by Ferreteria
	    if the right page component class is used.
	  * Also, PageKey_forShow_default() no longer exists; I'm going to assume
	    that we can just use PageKey_forShow().
      TODO: Consider whether maybe this functionality should be moved into $oContent.
    */
    protected function ProcessPage() {
	$gotPgDest = FALSE;
	$gotPgSrce = FALSE;
	
	// 2019-04-28 Should this bit be moved into HandlePageRequest()?
	$sKey = fcHTTP::Request()->GetString(KSQ_ARG_PAGE_DEST);
	if (is_null($sKey)) {
	    $this->SetPageKey_forShow(KSQ_PAGE_SHIP);
	} else {
	    $gotPgDest = TRUE;
	    $this->SetPageKey_forShow($sKey);
	}
	// [end of "this bit"]

	// get actual page to display
	$sShow = $this->GetPageKey_forShow();
	
	/*
	$arEv = array(
	  fcrEvent::KF_CODE		=> 'PG-IN',
	  fcrEvent::KF_DESCR_FINISH	=> 'showing page "'.$sShow.'"',
	  fcrEvent::KF_WHERE		=> 'HandleInput()',
	  ); */
	$rcCart = $this->GetCartRecord_ifWriteable();
	if (is_null($rcCart)) {
	    $sMsg = fcApp::Me()->MessagesString();
	    $wpCart = vcGlobals::Me()->GetWebPath_forCartPage();
	    if (is_null($sMsg)) {
		// 2016-04-24 This can happen when browser fingerprint changes.
		//throw new exception('In checkout with no current cart set, but there are no error messages.');
		$sMsg = "You don't seem to have a shopping cart yet, so you can't check out. If you had one before, your IP address or browser version may have changed.";
		fcHTTP::DisplayOnReturn($sMsg);
		fcHTTP::Redirect($wpCart);
	    } else {
		fcHTTP::DisplayOnReturn($sMsg);
		fcHTTP::Redirect($wpCart);
	    }
	}
	//$rcEv = $rcCart->CreateEvent($arEv);
	$rcEv = $rcCart->CreateEvent('PG-IN',"showing page '$sShow'");	// 2018-07-22 can add array (3rd arg) with additional info if needed
	$this->doBackBtn = TRUE;
	$this->doRefrBtn = FALSE;

	$this->DetectPageRequest();
	$this->HandlePageRequest();

	// controls need to get added by this point
	echo 'RECEIVING FORM IN ['.$this->GetName().']<br>';
	$oRes = $this->GetFormObject()->Receive($_POST);	// returns fcFormResult
	
	$this->CapturePage($oRes);

	//$this->GetSkinObject()->Content('main',$this->RenderPage());
    }