GetContentEncoding() != null) AddStr($headerString, 'charset=' . $page->GetContentEncoding(), ';'); header($headerString); } protected function Captions() { return $this->captions; } /** * @return Captions */ public function GetCaptions() { return $this->captions; } private function CreateSmatryObject() { $result = new Smarty(); $result->template_dir = 'components/templates'; return $result; } public function __construct($captions) { $this->captions = $captions; } #region Rendering public function DisplayTemplate($TemplateName, $InputObjects, $InputValues) { $smarty = $this->CreateSmatryObject(); foreach($InputObjects as $ObjectName => &$Object) $smarty->assign_by_ref($ObjectName, $Object); $smarty->assign_by_ref('Renderer', $this); $smarty->assign_by_ref('Captions', $this->captions); $smarty->assign('RenderScripts', $this->renderScripts); $smarty->assign('RenderText', $this->renderText); if (isset($this->additionalParams)) { foreach($this->additionalParams as $ValueName => $Value) { $smarty->assign($ValueName, $Value); } } foreach($InputValues as $ValueName => $Value) $smarty->assign($ValueName, $Value); $this->result = $smarty->fetch($TemplateName); } public function Render($Object, $renderScripts = true, $renderText = true, $additionalParams = null) { $oldRenderScripts = $this->renderScripts; $oldRenderText = $this->renderText; $oldAdditionalParams = $this->additionalParams; $this->renderScripts = $renderScripts; $this->renderText = $renderText; $this->additionalParams = array(); if (isset($additionalParams)) $this->additionalParams = $additionalParams; if (defined('SHOW_VARIABLES') && ($Object instanceof IVariableContainer)) { $this->additionalParams['Variables'] = $this->RenderVariableContainer($Object); } $Object->Accept($this); $this->renderScripts = $oldRenderScripts; $this->renderText = $oldRenderText; $this->additionalParams = $oldAdditionalParams; return $this->result; } public function RenderDef($object, $default = '', $additionalParams = null) { if (isset($object)) return $this->Render($object, true, true, $additionalParams); else return $default; } #endregion #region Editors private function RenderEditor(CustomEditor $editor, $nameInTemplate, $templateFile, $additionalParams = array()) { $validatorsInfo = array(); $validatorsInfo['InputAttributes'] = $editor->GetValidationAttributes(); $validatorsInfo['InputAttributes'] .= StringUtils::Format( ' data-legacy-field-name="%s" data-pgui-legacy-validate="true"', $editor->GetFieldName() ); $this->DisplayTemplate( Path::Combine('editors', $templateFile), array($nameInTemplate => $editor), array_merge( array( 'Validators' => $validatorsInfo, ($nameInTemplate == 'Editor' ? 'EditControl' : 'Editor') => $editor->GetViewData() ), $additionalParams )); } public function RenderTimeEdit(TimeEdit $editor) { $this->RenderEditor($editor, 'Editor', 'time_edit.tpl'); } public function RenderMaskedEdit(MaskedEdit $editor) { $this->RenderEditor($editor, 'Editor', 'masked_edit.tpl'); } public function RenderMultiLevelComboBoxEditor(MultiLevelComboBoxEditor $editor) { $params = array(); $editors = array(); foreach($editor->GetLevels() as $level) { $editorInfo = array(); $editorInfo['Name'] = $level->GetName(); $editorInfo['DataURL'] = $level->GetDataUrl(); $editorInfo['ParentEditor'] = $level->GetParentEditor(); $editorInfo['DisplayValue'] = $level->GetDisplayValue(); $editorInfo['Value'] = $level->GetValue(); $editorInfo['Caption'] = $level->GetCaption(); $editors[] = $editorInfo; } $params['Editors'] = $editors; $this->RenderEditor($editor, 'MultilevelEditor', 'multilevel_selection.tpl', $params); } public final function RenderAutocompleteComboBox(AutocomleteComboBox $comboBox) { $this->RenderEditor($comboBox, 'ComboBox', 'autocomplete_combo_box.tpl'); } public final function RenderCheckBox(CheckBox $checkBox) { $this->RenderEditor($checkBox, 'CheckBox', 'check_box.tpl'); } public final function RenderCheckBoxGroup(CheckBoxGroup $checkBoxGroup) { $this->RenderEditor($checkBoxGroup, 'CheckBoxGroup', 'check_box_group.tpl'); } public final function RenderComboBox(ComboBox $comboBox) { $this->RenderEditor($comboBox, 'ComboBox', 'combo_box.tpl'); } public final function RenderDateTimeEdit(DateTimeEdit $dateTimeEdit) { $this->RenderEditor($dateTimeEdit, 'DateTimeEdit', 'datetime_edit.tpl'); } public final function RenderHtmlWysiwygEditor(HtmlWysiwygEditor $editor) { $this->RenderEditor($editor, 'Editor', 'html_wysiwyg_editor.tpl'); } protected function ForceHideImageUploaderImage() { return false; } public final function RenderImageUploader(ImageUploader $imageUploader) { $this->RenderEditor($imageUploader, 'Uploader', 'image_uploader.tpl', array('HideImage' => $this->ForceHideImageUploaderImage())); } public final function RenderRadioEdit(RadioEdit $radioEdit) { $this->RenderEditor($radioEdit, 'RadioEdit', 'radio_edit.tpl'); } public final function RenderSpinEdit(SpinEdit $spinEdit) { $this->RenderEditor($spinEdit, 'SpinEdit', 'spin_edit.tpl'); } public final function RenderTextEdit(TextEdit $textEdit) { $this->RenderEditor($textEdit, 'TextEdit', 'text_edit.tpl'); } public final function RenderTextAreaEdit(TextAreaEdit $textArea) { $this->RenderEditor($textArea, 'TextArea', 'textarea.tpl'); } #endregion #region HTML Components public function RenderComponent($Component) { $this->result = ''; } public function RenderTextBox($textBox) { $this->result = $textBox->GetCaption(); } public function RenderImage($Image) { $this->DisplayTemplate('image.tpl', array('Image' => $Image), array()); } public function RenderCustomHtmlControl($control) { $this->result = $control->GetHtml(); } /** * @param Hyperlink $hyperLink */ public function RenderHyperLink($hyperLink) { $this->result = sprintf('%s%s', $hyperLink->GetLink(), $hyperLink->GetInnerText(), $hyperLink->GetAfterLinkText()); } public function RenderHintedTextBox($textBox) { $this->DisplayTemplate('hinted_text_box.tpl', array('TextBox' => $textBox), array()); } #endregion #region Variables public function GetPageVariables(Page $page) { if (defined('SHOW_VARIABLES')) { $this->RenderVariableContainer( $page->GetColumnVariableContainer() ); $variables = $this->result; } else { $variables = ''; } return $variables; } public function RenderVariableContainer(IVariableContainer $variableContainer) { $values = array(); $variableContainer->FillVariablesValues($values); $this->DisplayTemplate('variables_container.tpl', array(), array('Variables' => $values) ); } #endregion #region Columns private function GetNullValuePresentation($column) { if ($this->ShowHtmlNullValue()) return StringUtils::Format('%s', $this->GetCaptions()->GetMessageString('NullAsString')) ; else return ''; } /** * @param CustomViewColumn $column * @return void */ public final function RenderCustomViewColumn(CustomViewColumn $column) { $this->result = $column->GetValue(); } protected function GetFriendlyColumnName(CustomViewColumn $column) { return $column->GetGrid()->GetDataset()->IsLookupField($column->GetName()) ? $column->GetGrid()->GetDataset()->IsLookupFieldNameByDisplayFieldName($column->GetName()) : $column->GetName(); } /** * @param CustomViewColumn $column * @param array $rowValues * @return string */ protected function GetCustomRenderedViewColumn(CustomViewColumn $column, $rowValues) { return null; } /** * @param \CustomViewColumn $column * @param array $rowValues * @return string */ public final function RenderViewColumn(CustomViewColumn $column, $rowValues) { $customValue = $this->GetCustomRenderedViewColumn($column, $rowValues); if (isset($customValue)) return $column->GetGrid()->GetPage()->RenderText($customValue); else return $this->Render($column); } public final function RenderCustomDatasetFieldViewColumn(CustomDatasetFieldViewColumn $column) { $value = $column->GetValue(); if (!isset($value)) $this->result = $this->GetNullValuePresentation($column); else $this->result = $value; } /** * @param TextViewColumn $column */ public function RenderTextViewColumn($column) { $value = $column->GetValue(); $dataset = $column->GetDataset(); $column->BeforeColumnRender->Fire(array(&$value, &$dataset)); if (!isset($value)) { $this->result = $this->GetNullValuePresentation($column); } else { if ($column->GetEscapeHTMLSpecialChars()) $value = htmlspecialchars($value); $columnMaxLength = $column->GetMaxLength(); if ($this->HttpHandlersAvailable() && $this->ChildPagesAvailable() && isset($columnMaxLength) && isset($value) && strlen($value) > $columnMaxLength) { $originalValue = $value; if ($this->HtmlMarkupAvailable() && $column->GetReplaceLFByBR()) $originalValue = str_replace("\n", "
", $originalValue); $value = StringUtils::SubString($value, 0, $columnMaxLength, $column->GetGrid()->GetPage()->GetContentEncoding()); $value .= '... ' . $this->captions->GetMessageString('more') . ''; $value .= '
' . $originalValue . '
'; } if ($this->HtmlMarkupAvailable() && $column->GetReplaceLFByBR()) $value = str_replace("\n", "
", $value); $this->result = $value; } } public function RenderCheckBoxViewColumn($column) { $value = $column->GetInnerField()->GetData(); if (!isset($value)) $this->result = $this->Render($column->GetInnerField()); else if (empty($value)) { if ($this->HtmlMarkupAvailable()) $this->result = $column->GetFalseValue(); else $this->result = 'false'; } else { if ($this->HtmlMarkupAvailable()) $this->result = $column->GetTrueValue(); else $this->result = 'true'; } } public function RenderDivTagViewColumnDecorator($column) { if ($this->HtmlMarkupAvailable()) { $styles = ''; $styleBuilder = new StyleBuilder(); if (isset($column->Bold)) $styleBuilder->Add('font-weight', ($column->Bold ? 'bold' : 'normal')); if (isset($column->Italic)) $styleBuilder->Add('font-style', ($column->Italic ? 'italic' : 'normal')); $this->result = '
IsEmpty() ? ('style="' . $styleBuilder->GetStyleString() . '"') : '') . (isset($column->Align) ? ' align="' . $column->Align . '" ' : '') . (isset($column->CustomAttributes) ? $column->CustomAttributes . ' ' : '') . '>'. $this->Render($column->GetInnerField()) . '
'; } else { $this->result = $this->Render($column->GetInnerField()); } } public function RenderExtendedHyperLinkColumnDecorator($columDecorator) { if ($columDecorator->GetData() == null) { $this->result = $this->GetNullValuePresentation($columDecorator); } else { if ($this->HtmlMarkupAvailable()) { $this->result = sprintf('%s', $columDecorator->GetLink(), $columDecorator->GetTarget(), $this->Render($columDecorator->GetInnerField()) ); } else $this->result = $this->Render($columDecorator->GetInnerField()); } } public function RenderDownloadDataColumn($column) { if ($column->GetData() == null) { $this->result = $this->GetNullValuePresentation($column); } else { if ($this->HtmlMarkupAvailable() && $this->HttpHandlersAvailable()) $this->result = ' ' . '' . $column->GetLinkInnerHtml() . ''; else $this->result = $this->Captions()->GetMessageString('BinaryDataCanNotBeExportedToXls'); } } public function RenderImageViewColumn($column) { if ($column->GetData() == null) { $this->result = $this->GetNullValuePresentation($column); } else { if ($this->HtmlMarkupAvailable() && $this->HttpHandlersAvailable()) { if($column->GetEnablePictureZoom()) $this->result = sprintf( '%s', $column->GetFullImageLink(), $column->GetImageHint(), $column->GetImageLink(), $column->GetImageHint()); else $this->result = sprintf( '%s', $column->GetImageLink(), $column->GetImageHint()); } else { $this->result = $this->Captions()->GetMessageString('BinaryDataCanNotBeExportedToXls'); } } } public function RenderDetailColumn($detailColumn) { $this->result = '+ ' . 'view'; } #endregion #region Pages /** * @param PageNavigator $PageNavigator */ public function RenderPageNavigator($PageNavigator) { } public abstract function RenderPage(Page $Page); public function RenderCustomErrorPage($errorPage) { $this->DisplayTemplate('security_error_page.tpl', array( 'Page' => $errorPage ), array( 'JavaScriptMain' => '', 'Authentication' => $errorPage->GetAuthenticationViewData(), 'App' => $errorPage->GetViewData(), 'Message' => $errorPage->GetMessage(), 'Description' => $errorPage->GetDescription() ) ); } public function RenderDetailPage(DetailPage $detailPage) { $this->SetHTTPContentTypeByPage($detailPage); $layoutTemplate = $detailPage->GetCustomTemplate(PagePart::Layout, PageMode::ViewAll, 'common/layout.tpl'); $Grid = $this->Render($detailPage->GetGrid()); $this->DisplayTemplate('list/detail_page.tpl', array( 'App' => $detailPage->GetListViewData(), 'LayoutTemplateName' => $layoutTemplate, 'Page' => $detailPage, 'DetailPage' => $detailPage ), array( 'Authentication' => $detailPage->GetAuthenticationViewData(), 'Grid' => $Grid ) ); } /** * @param DetailPageEdit $DetailPage */ public function RenderDetailPageEdit($DetailPage) { } public function RenderLoginPage($loginPage) { $this->SetHTTPContentTypeByPage($loginPage); $this->DisplayTemplate('login_page.tpl', array( 'Page' => $loginPage, 'LoginControl' => $loginPage->GetLoginControl()), array( 'Title' => $loginPage->GetCaption() ) ); } #endregion #region Page parts public function RenderTextBlobViewer($textBlobViewer) { $this->DisplayTemplate('text_blob_viewer.tpl', array( 'Viewer' => $textBlobViewer, 'Page' => $textBlobViewer->GetParentPage()), array()); } public abstract function RenderGrid(Grid $Grid); public function RenderVerticalGrid(VerticalGrid $grid) { $this->SetHTTPContentTypeByPage($grid->GetGrid()->GetPage()); if ($grid->GetState() == VerticalGridState::JSONResponse) { $this->result = SystemUtils::ToXML($grid->GetResponse()); } else if ($grid->GetState() == VerticalGridState::DisplayGrid) { $hiddenValues = array(OPERATION_PARAMNAME => OPERATION_COMMIT); AddPrimaryKeyParametersToArray($hiddenValues, $grid->GetGrid()->GetDataset()->GetPrimaryKeyValues()); //$primaryKeyMap = $grid->GetGrid()->GetDataset()->GetPrimaryKeyValuesMap(); $this->DisplayTemplate( $grid->GetGrid()->GetPage()->GetCustomTemplate(PagePart::VerticalGrid, PageMode::ModalEdit, 'edit/vertical_grid.tpl'), array( 'Grid' => $grid->GetGrid()->GetModalEditViewData($this) ), array( 'HiddenValues' => $hiddenValues ) ); } else if ($grid->GetState() == VerticalGridState::DisplayInsertGrid) { $hiddenValues = array(OPERATION_PARAMNAME => OPERATION_COMMIT); $this->DisplayTemplate( $grid->GetGrid()->GetPage()->GetCustomTemplate(PagePart::VerticalGrid, PageMode::ModalInsert, 'insert/vertical_grid.tpl'), array( 'Grid' => $grid->GetGrid()->GetModalInsertViewData($this) ), array( 'HiddenValues' => $hiddenValues ) ); } else if ($grid->GetState() == VerticalGridState::DisplayCopyGrid) { $hiddenValues = array(OPERATION_PARAMNAME => OPERATION_COMMIT); $this->DisplayTemplate( $grid->GetGrid()->GetPage()->GetCustomTemplate(PagePart::VerticalGrid, PageMode::ModalInsert, 'insert/vertical_grid.tpl'), array( 'Grid' => $grid->GetGrid()->GetModalInsertViewData($this) ), array( 'HiddenValues' => $hiddenValues ) ); } } public function RenderRecordCardView(RecordCardView $recordCardView) { $Grid = $recordCardView->GetGrid(); $primaryKeyMap = array(); $Grid->GetDataset()->Open(); $Row = array(); if($Grid->GetDataset()->Next()) { $linkBuilder = $Grid->CreateLinkBuilder(); $linkBuilder->AddParameter(OPERATION_PARAMNAME, OPERATION_PRINT_ONE); $keyValues = $Grid->GetDataset()->GetPrimaryKeyValues(); for($i = 0; $i < count($keyValues); $i++) $linkBuilder->AddParameter("pk$i", $keyValues[$i]); $primaryKeyMap = $Grid->GetDataset()->GetPrimaryKeyValuesMap(); $rowValues = $Grid->GetDataset()->GetFieldValues(); foreach($Grid->GetSingleRecordViewColumns() as $Column) { $columnName = $Grid->GetDataset()->IsLookupField($Column->GetName()) ? $Grid->GetDataset()->IsLookupFieldNameByDisplayFieldName($Column->GetName()) : $Column->GetName(); $columnRenderResult = ''; $customRenderColumnHandled = false; $Grid->OnCustomRenderColumn->Fire(array( $columnName, $Column->GetData(), $rowValues, &$columnRenderResult, &$customRenderColumnHandled )); $columnRenderResult = $customRenderColumnHandled ? $columnRenderResult : $this->Render($Column); $Row[] = $columnRenderResult; } } else { RaiseError('Cannot retrieve single record. Check the primary key fields.'); } $this->DisplayTemplate( $Grid->GetPage()->GetCustomTemplate(PagePart::VerticalGrid, PageMode::ModalView, 'view/record_card_view.tpl') , array( 'Grid' => $Grid, 'Columns' => $Grid->GetSingleRecordViewColumns() ), array( 'PrintOneRecord' => $Grid->GetPage()->GetPrinterFriendlyAvailable(), 'PrintRecordLink' => $linkBuilder->GetLink(), 'Title' => $Grid->GetPage()->GetShortCaption(), 'PrimaryKeyMap' => $primaryKeyMap, 'ColumnCount' => count($Grid->GetSingleRecordViewColumns()), 'Row' => $Row, )); } public function RenderPageList(PageList $pageList) { $template = $pageList->GetParentPage()->GetCustomTemplate(PagePart::PageList, null, 'page_list.tpl'); $this->DisplayTemplate($template, array( 'PageList' => $pageList), array( 'Authentication' => $pageList->GetParentPage()->GetAuthenticationViewData(), 'List' => $pageList->GetViewData() )); } public function RenderLoginControl($loginControl) { $this->DisplayTemplate('login_control.tpl', array('LoginControl' => $loginControl), array()); } public function RenderSimpleSearch($searchControl) { // TODO: remove simple search control } public function RenderAdvancedSearchControl($advancedSearchControl) { //TODO: remove advance search control } #endregion #region Column rendering options protected function ShowHtmlNullValue() { return false; } protected function HttpHandlersAvailable() { return true; } protected function HtmlMarkupAvailable() { return true; } protected function ChildPagesAvailable() { return true; } #endregion } class SingleAdvancedSearchRenderer extends Renderer { function RenderPage(Page $Page) { $this->SetHTTPContentTypeByPage($Page); $Page->BeforePageRender->Fire(array(&$Page)); if (isset($Page->AdvancedSearchControl)) { $Page->AdvancedSearchControl->SetHidden(false); $Page->AdvancedSearchControl->SetAllowOpenInNewWindow(false); $linkBuilder = $Page->CreateLinkBuilder(); $Page->AdvancedSearchControl->SetTarget($linkBuilder->GetLink()); } $this->DisplayTemplate('common/single_advanced_search_page.tpl', array( 'Page' => $Page ), array( 'AdvancedSearch' => $this->RenderDef($Page->AdvancedSearchControl), 'PageList' => $this->RenderDef($Page->GetPageList()) ) ); } public function RenderDetailPageEdit($Page) { $this->SetHTTPContentTypeByPage($Page); $Page->BeforePageRender->Fire(array(&$Page)); if (isset($Page->AdvancedSearchControl)) { $Page->AdvancedSearchControl->SetHidden(false); $Page->AdvancedSearchControl->SetAllowOpenInNewWindow(false); $linkBuilder = $Page->CreateLinkBuilder(); $Page->AdvancedSearchControl->SetTarget($linkBuilder->GetLink()); } $this->DisplayTemplate('common/single_advanced_search_page.tpl', array( 'Page' => $Page ), array( 'AdvancedSearch' => $this->RenderDef($Page->AdvancedSearchControl), 'PageList' => $this->RenderDef($Page->GetPageList()) ) ); } function RenderGrid(Grid $Grid) { $this->result = ''; } public function RenderFilterBuilderControl(FilterBuilderControl $filterBuilderControl) { } } ?>