Difference between revisions of "VbzCart/v1/class/vcPageContent ckout/DoPage"
< VbzCart | v1/class | vcPageContent ckout
Jump to navigation
Jump to search
Line 10: | Line 10: | ||
** '''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) | ** '''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) | ||
*** Seems like it ''should'' be happening in {{l/version/method|vcPageContent_ckout|OnRunCalculations}}, which ''does'' get called. | *** Seems like it ''should'' be happening in {{l/version/method|vcPageContent_ckout|OnRunCalculations}}, which ''does'' get called. | ||
− | *** ...but we're trying to receive the form ''first'', here in {{l/version/method|vcPageContent_ckout|ProcessPage}}(), ''before'' the controls have been created ( | + | *** ...but we're trying to receive the form ''first'', here in {{l/version/method|vcPageContent_ckout|ProcessPage}}(), ''before'' the controls have been created... |
+ | *** ...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. | ||
+ | *** So CapturePage() needs to be split into two parts: | ||
+ | ***# receive raw form data (do not load into controls; just detect request) | ||
+ | ***# load form data into control objects (which must be created first) | ||
* '''receive submitted page''' - $this->CapturePage($oRes); | * '''receive submitted page''' - $this->CapturePage($oRes); | ||
* '''process submitted page''' | * '''process submitted page''' |
Revision as of 11:52, 4 May 2019
Notes
2019-04-27 I think what needs to happen is that things need to happen in the following order:
- detect submitted page - $this->GetPageKey_forData();
- detect requested page - $this->DetectPageRequest();
- determine page to show - $this->HandlePageRequest();
- calculate if requested page should be displayed
- load all form controls needed to receive submitted & show display page
- 2019-04-28 probably what needs to happen here is that we need to duplicate the logic of whatever calls vcCartDataManager::GetBuyerObject() et al. (currently includes capturing, rendering, and other stuff) and just create the requisite objects, don't try to use them yet.
- 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)
- Seems like it should be happening in vcPageContent_ckout::OnRunCalculations, which does get called.
- ...but we're trying to receive the form first, here in vcPageContent_ckout::ProcessPage(), before the controls have been created...
- ...which happens in vcPageContent_ckout::CapturePage, which is called before the input is processed in vcPageContent_ckout::DetectPageRequest() so we know which controls to create.
- So CapturePage() needs to be split into two parts:
- receive raw form data (do not load into controls; just detect request)
- load form data into control objects (which must be created first)
- receive submitted page - $this->CapturePage($oRes);
- process submitted page
To examine -- how do the following functions intersect with the above steps?:
- $this->CapturePage($oRes);
- $this->HandlePageRequest();
Calls
- vcPageContent_ckout::OnRunCalculations() [protected; events system] calls...
- Internal states:
- {Set/Get}PageKey_Request() - the page requested by the user
- {Set/Get}PageKey_forShow() - the page to display
- vcPageContent_ckout::GetPageKey_forData()
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;
$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);
}
// 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;
// 2019-04-21 Tentatively, this needs to happen here:
$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->DetectPageRequest();
$this->HandlePageRequest();
//$this->GetSkinObject()->Content('main',$this->RenderPage());
}