protected function RenderEnd($blnDisplayOutput = true) { // Ensure that RenderEnd() has not yet been called switch ($this->intFormStatus) { case QFormBase::FormStatusUnrendered: throw new QCallerException('$this->RenderBegin() was never called'); case QFormBase::FormStatusRenderBegun: break; case QFormBase::FormStatusRenderEnded: throw new QCallerException('$this->RenderEnd() has already been called'); break; default: throw new QCallerException('FormStatus is in an unknown status'); } // Setup End Script $strEndScript = ''; // First, call regC on all Controls $strControlIdToRegister = array(); foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { array_push($strControlIdToRegister, '"' . $objControl->ControlId . '"'); } } if (count($strControlIdToRegister)) { $strEndScript .= sprintf('qc.regCA(new Array(%s)); ', implode(',', $strControlIdToRegister)); } // Next, run any GetEndScrips on Controls and Groupings foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strEndScript .= $objControl->GetEndScript(); } } foreach ($this->objGroupingArray as $objGrouping) { $strEndScript .= $objGrouping->Render(); } // Run End Script Compressor $strEndScriptArray = explode('; ', $strEndScript); $strEndScriptCommands = array(); foreach ($strEndScriptArray as $strEndScript) { $strEndScriptCommands[trim($strEndScript)] = true; } $strEndScript = implode('; ', array_keys($strEndScriptCommands)); // Finally, add any application level js commands $strEndScript .= QApplication::RenderJavaScript(false); // Next, go through all controls and gather up any JS or CSS to run or Form Attributes to modify // due to dynamically created controls $strJavaScriptToAddArray = array(); $strStyleSheetToAddArray = array(); $strFormAttributeToModifyArray = array(); foreach ($this->GetAllControls() as $objControl) { // Include any JavaScripts? The control would have a // comma-delimited list of javascript files to include (if applicable) if ($strScriptArray = $this->ProcessJavaScriptList($objControl->JavaScripts)) { $strJavaScriptToAddArray = array_merge($strJavaScriptToAddArray, $strScriptArray); } // Include any StyleSheets? The control would have a // comma-delimited list of stylesheet files to include (if applicable) if ($strScriptArray = $this->ProcessStyleSheetList($objControl->StyleSheets)) { $strStyleSheetToAddArray = array_merge($strStyleSheetArray, $strScriptArray); } // Form Attributes? if ($objControl->FormAttributes) { foreach ($objControl->FormAttributes as $strKey => $strValue) { if (!array_key_exists($strKey, $this->strFormAttributeArray)) { $this->strFormAttributeArray[$strKey] = $strValue; $strFormAttributeToModifyArray[$strKey] = $strValue; } else { if ($this->strFormAttributeArray[$strKey] != $strValue) { $this->strFormAttributeArray[$strKey] = $strValue; $strFormAttributeToModifyArray[$strKey] = $strValue; } } } } } // Finally, render the JS Commands to Execute // First, alter any <Form> settings that need to be altered foreach ($strFormAttributeToModifyArray as $strKey => $strValue) { $strEndScript .= sprintf('document.getElementById("%s").%s = "%s"; ', $this->strFormId, $strKey, $strValue); } // Next, add any new CSS files that haven't yet been included to the end of the High Priority commands string foreach ($strStyleSheetToAddArray as $strScript) { $strEndScript .= 'qc.loadStyleSheetFile("' . $strScript . '", "all"); '; } // Next, add any new JS files that haven't yet been included to the BEGINNING of the High Priority commands string // (already rendered HP commands up to this point will be placed into the callback) foreach ($strJavaScriptToAddArray as $strScript) { if ($strEndScript) { $strEndScript = 'qc.loadJavaScriptFile("' . $strScript . '", function() {' . $strEndScript . '}); '; } else { $strEndScript = 'qc.loadJavaScriptFile("' . $strScript . '", null); '; } } // Finally, add qcodo includes path $strEndScript = sprintf('qc.jsAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __JS_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.phpAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __PHP_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.cssAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __CSS_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.imageAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __IMAGE_ASSETS__) . $strEndScript; // Create Final EndScript Script $strEndScript = sprintf('<script type="text/javascript">qc.registerForm(); %s</script>', $strEndScript); // Persist Controls (if applicable) foreach ($this->objPersistentControlArray as $objControl) { $objControl->Persist(); } // Clone Myself $objForm = clone $this; // Render HTML $strToReturn = "\r\n<div style=\"display: none;\">\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormState" id="Qform__FormState" value="%s" />', QForm::Serialize($objForm)); $strToReturn .= "\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormId" id="Qform__FormId" value="%s" />', $this->strFormId); $strToReturn .= "\r\n</div>\r\n"; // The Following "Hidden Form Variables" are no longer explicitly rendered in HTML, but are now // added to the DOM by the Qcodo JavaScript Library method qc.initialize(): // * Qform__FormControl // * Qform__FormEvent // * Qform__FormParameter // * Qform__FormCallType // * Qform__FormUpdates // * Qform__FormCheckableControls foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strToReturn .= $objControl->GetEndHtml(); } } $strToReturn .= "\n</form>"; $strToReturn .= $strEndScript; if ($this->blnRenderedBodyTag) { $strToReturn .= '</body>'; } // Update Form Status $this->intFormStatus = QFormBase::FormStatusRenderEnded; // Display or Return if ($blnDisplayOutput) { print $strToReturn; return null; } else { return $strToReturn; } }
/** * @param bool $blnDisplayOutput should the output be returned or directly printed to screen. * * @return null|string * @throws QCallerException */ public function RenderEnd($blnDisplayOutput = true) { // Ensure that RenderEnd() has not yet been called switch ($this->intFormStatus) { case QFormBase::FormStatusUnrendered: throw new QCallerException('$this->RenderBegin() was never called'); case QFormBase::FormStatusRenderBegun: break; case QFormBase::FormStatusRenderEnded: throw new QCallerException('$this->RenderEnd() has already been called'); break; default: throw new QCallerException('FormStatus is in an unknown status'); } //Clear included javascript array $this->strIncludedJavaScriptFileArray = array(); // Setup End Script $strEndScript = ''; $strEvents = ''; // First, call regC on all Controls $strControlIdToRegister = array(); foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { array_push($strControlIdToRegister, '"' . $objControl->ControlId . '"'); } } if (count($strControlIdToRegister)) { $strEndScript .= sprintf('qc.regCA(new Array(%s)); ', implode(',', $strControlIdToRegister)); } // Next, run any GetEndScrips on Controls and Groupings foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strControlScript = $objControl->GetEndScript(); if (strlen($strControlScript) > 0) { $strEvents .= $strControlScript . ";\n"; } } } foreach ($this->objGroupingArray as $objGrouping) { $strGroupingScript = $objGrouping->Render(); if (strlen($strGroupingScript) > 0) { $strEvents .= $strGroupingScript . ";\n"; } } // Run End Script Compressor $strEndScriptArray = explode(";\n", $strEndScript); $strEndScriptCommands = array(); foreach ($strEndScriptArray as $strEndScript) { $strEndScriptCommands[trim($strEndScript)] = true; } $strEndScript = implode(";\n", array_keys($strEndScriptCommands)); // Next, go through all controls and gather up any JS or CSS to run or Form Attributes to modify // due to dynamically created controls $strJavaScriptToAddArray = array(); $strStyleSheetToAddArray = array(); $strFormAttributeToModifyArray = array(); foreach ($this->GetAllControls() as $objControl) { // Include any JavaScripts? The control would have a // comma-delimited list of javascript files to include (if applicable) if ($strScriptArray = $this->ProcessJavaScriptList($objControl->JavaScripts)) { $strJavaScriptToAddArray = array_merge($strJavaScriptToAddArray, $strScriptArray); } // Include any StyleSheets? The control would have a // comma-delimited list of stylesheet files to include (if applicable) if ($strScriptArray = $this->ProcessStyleSheetList($objControl->StyleSheets)) { $strStyleSheetToAddArray = array_merge($strStyleSheetToAddArray, $strScriptArray); } // Form Attributes? if ($objControl->FormAttributes) { foreach ($objControl->FormAttributes as $strKey => $strValue) { if (!array_key_exists($strKey, $this->strFormAttributeArray)) { $this->strFormAttributeArray[$strKey] = $strValue; $strFormAttributeToModifyArray[$strKey] = $strValue; } else { if ($this->strFormAttributeArray[$strKey] != $strValue) { $this->strFormAttributeArray[$strKey] = $strValue; $strFormAttributeToModifyArray[$strKey] = $strValue; } } } } } // Figure out initial list of JavaScriptIncludes $strJavaScriptArray = $this->ProcessJavaScriptList(__JQUERY_BASE__ . ', ' . __JQUERY_EFFECTS__ . ',jquery/jquery.ajaxq-0.0.1.js,' . __QCUBED_JS_CORE__); if (defined('__PRELOAD_JS_FILES__') && __PRELOAD_JS_FILES__) { $strJavaScriptArray = array_merge($strJavaScriptArray, $strJavaScriptToAddArray); $strJavaScriptToAddArray = array(); } // Setup IncludeJs $strToReturn = "\r\n"; // Include javascripts that need to be included foreach ($strJavaScriptArray as $strScript) { $strToReturn .= sprintf('<script type="text/javascript" src="%s"></script>', $this->GetJsFileUri($strScript)); $strToReturn .= "\r\n"; } // First, alter any <Form> settings that need to be altered foreach ($strFormAttributeToModifyArray as $strKey => $strValue) { $strEndScript .= sprintf('document.getElementById("%s").%s = "%s"; ', $this->strFormId, $strKey, $strValue); } // Next, add any new CSS files that haven't yet been included to the end of the High Priority commands string foreach ($strStyleSheetToAddArray as $strScript) { $strEndScript .= 'qc.loadStyleSheetFile("' . $strScript . '", "all"); '; } if ($strEvents) { // qc.regCA first, $strEvents 2nd, application scripts 3rd $strEndScript = $strEndScript . ';' . $strEvents; } // Add any application level js commands. These might refer to previous objects. $strEndScript .= QApplication::RenderJavaScript(false); // Next, add any new JS files that haven't yet been included to the BEGINNING of the High Priority commands string // (already rendered HP commands up to this point will be placed into the callback) foreach (array_reverse($strJavaScriptToAddArray) as $strScript) { if ($strEndScript) { $strEndScript = 'qc.loadJavaScriptFile("' . $strScript . '", function() {' . $strEndScript . '}); '; } else { $strEndScript = 'qc.loadJavaScriptFile("' . $strScript . '", null); '; } } // Finally, add QCubed includes path $strEndScript = sprintf('qc.baseDir = "%s"; ', __VIRTUAL_DIRECTORY__) . $strEndScript; $strEndScript = sprintf('qc.jsAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __JS_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.phpAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __PHP_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.cssAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __CSS_ASSETS__) . $strEndScript; $strEndScript = sprintf('qc.imageAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __IMAGE_ASSETS__) . $strEndScript; // Create Final EndScript Script $strEndScript = sprintf('<script type="text/javascript">$j(document).ready(function() { %s; });</script>', $strEndScript); // Persist Controls (if applicable) foreach ($this->objPersistentControlArray as $objControl) { $objControl->Persist(); } // Clone Myself $objForm = clone $this; // Render HTML $strToReturn .= "\r\n<div style=\"display: none;\">\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormState" id="Qform__FormState" value="%s" />', QForm::Serialize($objForm)); $strToReturn .= "\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormId" id="Qform__FormId" value="%s" />', $this->strFormId); $strToReturn .= "\r\n</div>\r\n"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormControl" id="Qform__FormControl" value="" />'); $strToReturn .= sprintf('<input type="hidden" name="Qform__FormEvent" id="Qform__FormEvent" value="" />'); $strToReturn .= sprintf('<input type="hidden" name="Qform__FormParameter" id="Qform__FormParameter" value="" />'); $strToReturn .= sprintf('<input type="hidden" name="Qform__FormCallType" id="Qform__FormCallType" value="" />'); $strToReturn .= sprintf('<input type="hidden" name="Qform__FormUpdates" id="Qform__FormUpdates" value="" />'); $strToReturn .= sprintf('<input type="hidden" name="Qform__FormCheckableControls" id="Qform__FormCheckableControls" value="" />'); foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strToReturn .= $objControl->GetEndHtml(); } } $strToReturn .= "\n</form>"; $strToReturn .= $strEndScript; if ($this->blnRenderedBodyTag) { $strToReturn .= '</body>'; } // Update Form Status $this->intFormStatus = QFormBase::FormStatusRenderEnded; // Display or Return if ($blnDisplayOutput) { if (!QApplication::$CliMode) { print $strToReturn; } return null; } else { if (!QApplication::$CliMode) { return $strToReturn; } else { return ''; } } }
public static function OutputPage($strBuffer) { // If the ProcessOutput flag is set to false, simply return the buffer // without processing anything. if (!QApplication::$ProcessOutput) { return $strBuffer; } if (QApplication::$ErrorFlag) { return $strBuffer; } else { if (QApplication::$RequestMode == QRequestMode::Ajax) { return trim($strBuffer); } else { // Update Cache-Control setting header('Cache-Control: ' . QApplication::$CacheControl); $strScript = QApplication::RenderJavaScript(false); if ($strScript) { return sprintf('%s<script type="text/javascript">%s</script>', $strBuffer, $strScript); } return $strBuffer; } } }
protected function RenderEnd($blnDisplayOutput = true) { // Ensure that RenderEnd() has not yet been called switch ($this->intFormStatus) { case QFormBase::FormStatusUnrendered: throw new QCallerException('$this->RenderBegin() was never called'); case QFormBase::FormStatusRenderBegun: break; case QFormBase::FormStatusRenderEnded: throw new QCallerException('$this->RenderEnd() has already been called'); break; default: throw new QCallerException('FormStatus is in an unknown status'); } // Get End Script $strEndScript = ''; // First, regC on all Controls $strControlIdToRegister = array(); foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { array_push($strControlIdToRegister, '"' . $objControl->ControlId . '"'); } } if (count($strControlIdToRegister)) { $strEndScript = sprintf('qc.regCA(new Array(%s)); ', implode(',', $strControlIdToRegister)); } // Next, run any GetEndScrips on Controls and Groupings foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strEndScript .= $objControl->GetEndScript(); } } foreach ($this->objGroupingArray as $objGrouping) { $strEndScript .= $objGrouping->Render(); } // Run End Script Compressor $strEndScriptArray = explode('; ', $strEndScript); $strEndScriptCommands = array(); foreach ($strEndScriptArray as $strEndScript) { $strEndScriptCommands[trim($strEndScript)] = true; } $strEndScript = implode('; ', array_keys($strEndScriptCommands)); // Next, add qcodo includes path $strEndScript .= sprintf('qc.jsAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __JS_ASSETS__); $strEndScript .= sprintf('qc.phpAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __PHP_ASSETS__); $strEndScript .= sprintf('qc.cssAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __CSS_ASSETS__); $strEndScript .= sprintf('qc.imageAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __IMAGE_ASSETS__); // Finally, add any application level js commands $strEndScript .= QApplication::RenderJavaScript(false); // Create Final EndScript Script $strEndScript = sprintf('<script type="text/javascript">qc.registerForm(); %s</script>', $strEndScript); // Clone Myself $objForm = clone $this; // Render HTML $strToReturn = "\r\n<div>\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormState" id="Qform__FormState" value="%s" />', QForm::Serialize($objForm)); $strToReturn .= "\r\n\t"; $strToReturn .= sprintf('<input type="hidden" name="Qform__FormId" id="Qform__FormId" value="%s" />', $this->strFormId); $strToReturn .= "\r\n</div>\r\n"; // $strToReturn .= "\n\t"; // $strToReturn .= '<input type="hidden" name="Qform__FormControl" id="Qform__FormControl" value="" />'; // $strToReturn .= '<input type="hidden" name="Qform__FormEvent" id="Qform__FormEvent" value="" />'; // $strToReturn .= '<input type="hidden" name="Qform__FormParameter" id="Qform__FormParameter" value="" />'; // $strToReturn .= '<input type="hidden" name="Qform__FormCallType" id="Qform__FormCallType" value="" />'; // $strToReturn .= '<input type="hidden" name="Qform__FormUpdates" id="Qform__FormUpdates" value="" />'; // $strToReturn .= '<input type="hidden" name="Qform__FormCheckableControls" id="Qform__FormCheckableControls" value="" />'; /* $strToReturn .= '<div id="Qform_Logger" style="display:none;width:400px;background-color:#dddddd;font-size:10px;font-family:lucida console, courier, monospaced;padding:6px;'; if (QApplication::IsBrowser(QBrowserType::InternetExplorer)) $strToReturn .= 'filter:alpha(opacity=50);'; else $strToReturn .= 'opacity:0.5;'; $strToReturn .= 'overflow:auto;"></div>';*/ foreach ($this->GetAllControls() as $objControl) { if ($objControl->Rendered) { $strToReturn .= $objControl->GetEndHtml(); } } $strToReturn .= "\n</form>"; $strToReturn .= $strEndScript; if ($this->blnRenderedBodyTag) { $strToReturn .= '</body>'; } // Update Form Status $this->intFormStatus = QFormBase::FormStatusRenderEnded; // Display or Return if ($blnDisplayOutput) { print $strToReturn; return null; } else { return $strToReturn; } }