/** * @param $url * @param $text * @return string */ public static function a($url, $text, $classes_str = '', $target = '') { $target_str = ''; if ($target != '') { $target_str = ' target="' . Sanitize::sanitizeAttrValue($target) . '" '; } return '<a class="' . Sanitize::sanitizeAttrValue($classes_str) . '" href="' . Sanitize::sanitizeUrl($url) . '"' . $target_str . '>' . Sanitize::sanitizeTagContent($text) . '</a>'; }
/** * Returns sanitized content. * @param $obj * @return string */ public function html($obj) { $value = CRUDCompiler::compile($this->getValue(), ['this' => $obj]); $html = "UNDEFINED"; $options_arr = $this->getOptionsArr(); if (array_key_exists($value, $options_arr)) { $html = $options_arr[$value]; } return Sanitize::sanitizeTagContent($html); }
public function html($obj) { $field_name = $this->getFieldName(); $field_value = CRUDFieldsAccess::getObjectFieldValue($obj, $field_name); $is_required_str = ''; if ($this->is_required) { $is_required_str = ' required '; } $disabled = ''; if ($this->getDisabled()) { $disabled = 'disabled'; } return '<textarea name="' . Sanitize::sanitizeAttrValue($field_name) . '" ' . $is_required_str . ' class="form-control" rows="5" ' . $disabled . '>' . Sanitize::sanitizeTagContent($field_value) . '</textarea>'; }
/** * @param $arr * @param $path * @return mixed * @throws \Exception */ public static function getRequiredSubvalue($arr, $path) { Assert::assert(!empty($path)); Assert::assert(is_array($arr)); $value = $arr; $parts = explode(".", $path); foreach ($parts as $part) { if (isset($value[$part])) { $value = $value[$part]; } else { throw new \Exception('missing config key: ' . \OLOG\Sanitize::sanitizeTagContent($path)); } } return $value; }
public static function renderTabs(array $tabs_arr) { echo '<ul class="nav nav-tabs">'; foreach ($tabs_arr as $tab_arr) { $classes = ''; // TODO: код взят из Router::match3() - использовать общую реализацию? $url_regexp = '@^' . $tab_arr['MATCH_URL'] . '$@'; $matches_arr = array(); $current_url = \OLOG\Router::uri_no_getform(); if (preg_match($url_regexp, $current_url, $matches_arr)) { $classes .= ' active '; } echo '<li role="presentation" class="' . Sanitize::sanitizeAttrValue($classes) . '"><a href="' . Sanitize::sanitizeUrl($tab_arr['LINK_URL']) . '">' . Sanitize::sanitizeTagContent($tab_arr['TITLE']) . '</a></li>'; } echo '</ul>'; }
public function html($obj) { $field_name = $this->getFieldName(); $field_value = CRUDFieldsAccess::getObjectFieldValue($obj, $field_name); $editor_element_id = 'editor_' . time() . '_' . rand(1, 999999); $html = ''; $html .= ' <style> #' . $editor_element_id . ' { position: relative; top: 0; right: 0; bottom: 0; left: 0; height: 500px; } </style> '; // TODO: is form-control needed? $html .= '<div id="' . $editor_element_id . '" class="form-control">' . Sanitize::sanitizeTagContent($field_value) . '</div>'; $html .= '<textarea id="' . $editor_element_id . '_target" name="' . Sanitize::sanitizeAttrValue($field_name) . '" style="display: none;">' . Sanitize::sanitizeTagContent($field_value) . '</textarea>'; // TODO: multiple insertion!!!! $html .= '<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/ace.js" type="text/javascript" charset="utf-8"></script> <script> //var editor_element = document.getElementById("' . $editor_element_id . '"); //editor_element.parentElement.style.height = "500px"; var editor = ace.edit("' . $editor_element_id . '"); // TODO: enable another modes editor.getSession().setMode("ace/mode/html"); editor.getSession().on("change", function() { var target = document.getElementById("' . $editor_element_id . '_target"); //var editor_element = document.getElementById("' . $editor_element_id . '"); target.innerHTML = editor.getSession().getValue(); }); </script> '; return $html; }
public function html($obj) { static $CRUDFormWidgetDateTime_include_script; $field_name = $this->getFieldName(); $field_value = CRUDFieldsAccess::getObjectFieldValue($obj, $field_name); /* Нужно изменить на нах CDN */ $script = ''; if (!isset($CRUDFormWidgetDateTime_include_script)) { $script = ' <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/locale/ru.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.43/css/bootstrap-datetimepicker.min.css"> <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.43/js/bootstrap-datetimepicker.min.js"></script> '; $CRUDFormWidgetDateTime_include_script = false; } $is_required_str = ''; if ($this->is_required) { $is_required_str = ' required '; } $field_value_attr = ''; if ($field_value) { $field_value_attr = date('d-m-Y H:i:s', strtotime($field_value)); } $uniqid = uniqid('CRUDFormWidgetDateTime_'); $input_cols = $this->getShowNullCheckbox() ? '10' : '12'; $html = ''; $html .= '<div class="row">'; $html .= '<div class="col-sm-' . $input_cols . '">'; ob_start(); ?> <input type="hidden" id="<?php echo $uniqid; ?> _input" name="<?php echo Sanitize::sanitizeAttrValue($field_name); ?> " value="<?php echo Sanitize::sanitizeTagContent($field_value); ?> " data-field="<?php echo $uniqid; ?> _date" <?php echo $is_required_str; ?> > <div class="input-group date" id="<?php echo $uniqid; ?> "> <input id="<?php echo $uniqid; ?> _date" type="text" class="form-control" value="<?php echo $field_value_attr; ?> "> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> <script> $("#<?php echo $uniqid; ?> ").datetimepicker({ format: "DD-MM-YYYY HH:mm:ss", sideBySide: true, showTodayButton: true }).on("dp.change", function (obj) { if (obj.date) { $("#<?php echo $uniqid; ?> _input").val(obj.date.format("YYYY-MM-DD HH:mm:ss")).trigger('change'); } else { $("#<?php echo $uniqid; ?> _input").val('').trigger('change'); } }); </script> <?php $html .= ob_get_clean(); $html .= '</div>'; if ($this->getShowNullCheckbox()) { $is_null_checked = ''; if (is_null($field_value)) { $is_null_checked = ' checked '; } ob_start(); ?> <div class="col-sm-2"> <label class="form-control-static"> <input id="<?php echo $uniqid; ?> ___is_null" type="checkbox" value="1" name="<?php echo Sanitize::sanitizeAttrValue($field_name); ?> ___is_null" <?php echo $is_null_checked; ?> > NULL </label> </div> <script> (function () { var $input_is_null = $('#<?php echo $uniqid; ?> ___is_null'); $("#<?php echo $uniqid; ?> _input").on('change', function () { $input_is_null.prop('checked',false); }); $input_is_null.on('change', function () { if ($(this).is(':checked')) { $('#<?php echo $uniqid; ?> ').data("DateTimePicker").clear(); $('#<?php echo $uniqid; ?> _input').val(''); } }); })(); </script> <?php $html .= ob_get_clean(); } $html .= '</div>'; return $script . $html; }
public static function html($model_class_name, $create_form_html, $column_obj_arr, $parent_id_field_name, $order_by = '', $table_id = '1', $filters_arr = [], $col_with_padding_index = 0, $filters_position = CRUDTable::FILTERS_POSITION_NONE) { // TODO: придумать способ автогенерации table_id, который был бы уникальным, но при этом один и тот же когда одну таблицу запрашиваешь несколько раз CRUDTable::executeOperations(); $objs_ids_arr = CRUDInternalTableObjectsSelector::getRecursiveObjIdsArrForClassName($model_class_name, $parent_id_field_name, $filters_arr, $order_by); // // вывод таблицы // $table_container_element_id = 'tableContainer_' . $table_id; // оборачиваем в отдельный div для выдачи только таблицы аяксом - иначе корневой элемент документа не будет доступен в jquery селекторах $html = '<div>'; $html .= '<div class="' . $table_container_element_id . ' row">'; if ($filters_position == CRUDTable::FILTERS_POSITION_LEFT) { $html .= '<div class="col-sm-4">'; $html .= self::filtersHtml($filters_arr); $html .= '</div>'; $html .= '<div class="col-sm-8">'; } else { $html .= '<div class="col-sm-12">'; } $html .= self::toolbarHtml($table_id, $create_form_html); if ($filters_position == CRUDTable::FILTERS_POSITION_TOP) { $html .= self::filtersHtml($filters_arr); } $html .= '<table class="table table-hover">'; $html .= '<thead>'; $html .= '<tr>'; /** @var InterfaceCRUDTableColumn $column_obj */ foreach ($column_obj_arr as $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); $html .= '<th>' . Sanitize::sanitizeTagContent($column_obj->getTitle()) . '</th>'; } $html .= '</tr>'; $html .= '</thead>'; $html .= '<tbody>'; foreach ($objs_ids_arr as $obj_data) { $obj_id = $obj_data['id']; $obj_obj = CRUDObjectLoader::createAndLoadObject($model_class_name, $obj_id); $html .= '<tr>'; /** @var InterfaceCRUDTableColumn $column_obj */ foreach ($column_obj_arr as $col_index => $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); /** @var InterfaceCRUDTableWidget $widget_obj */ $widget_obj = $column_obj->getWidgetObj(); Assert::assert($widget_obj); Assert::assert($widget_obj instanceof InterfaceCRUDTableWidget); $col_width_attr = ''; if ($widget_obj instanceof CRUDTableWidgetDelete) { $col_width_attr = ' width="1px" '; } if ($widget_obj instanceof CRUDTableWidgetWeight) { $col_width_attr = ' width="1px" '; } $html .= '<td ' . $col_width_attr . '>'; if ($col_index == $col_with_padding_index) { $html .= '<div style="padding-left: ' . $obj_data['depth'] * 30 . 'px;">'; } $html .= $widget_obj->html($obj_obj); if ($col_index == 0) { $html .= '</div>'; } $html .= '</td>'; } $html .= '</tr>'; } $html .= '</tbody>'; $html .= '</table>'; $html .= '</div>'; $html .= '</div>'; $html .= '</div>'; // Загрузка скриптов $html .= CRUDTableScript::getHtml($table_container_element_id, Url::getCurrentUrlNoGetForm()); return $html; }
/** * table_id - это идентификатор таблицы на странице, к которому привязываются все данные: имена полей формы и т.п. * @param $model_class_name * @param $create_form_html * @param $column_obj_arr * @param array $filters_arr * @param string $order_by * @return string */ public static function html($model_class_name, $create_form_html, $column_obj_arr, $filters_arr = [], $order_by = '', $table_id = '', $filters_position = self::FILTERS_POSITION_NONE) { // TODO: придумать способ автогенерации table_id, который был бы уникальным, но при этом один и тот же когда одну таблицу запрашиваешь несколько раз self::executeOperations(); // // вывод таблицы // $table_container_element_id = uniqid('tableContainer_'); if ($table_id) { $table_container_element_id = $table_id; } // оборачиваем в отдельный div для выдачи только таблицы аяксом - иначе корневой элемент документа не будет доступен в jquery селекторах $html = HTML::div($table_container_element_id, '', function () use($model_class_name, $create_form_html, $column_obj_arr, $filters_arr, $order_by, $table_id, $filters_position) { echo '<div class="row">'; if ($filters_position == self::FILTERS_POSITION_LEFT) { echo '<div class="col-sm-4">'; echo self::filtersHtml($table_id, $filters_arr); echo '</div>'; } $col_sm_class = '12'; if ($filters_position == self::FILTERS_POSITION_LEFT || $filters_position == self::FILTERS_POSITION_RIGHT) { $col_sm_class = '8'; } echo '<div class="col-sm-' . $col_sm_class . '">'; echo self::toolbarHtml($table_id, $create_form_html, $filters_arr); if ($filters_position == self::FILTERS_POSITION_TOP) { echo self::filtersHtml($table_id, $filters_arr); } if ($filters_position == self::FILTERS_POSITION_INLINE) { echo self::filtersHtmlInline($table_id, $filters_arr); } echo '<table class="table table-hover">'; /** @var InterfaceCRUDTableColumn $column_obj */ echo '<thead><tr>'; foreach ($column_obj_arr as $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); echo '<th>' . Sanitize::sanitizeTagContent($column_obj->getTitle()) . '</th>'; } echo '</tr></thead>'; echo '<tbody>'; $objs_ids_arr = CRUDInternalTableObjectsSelector::getObjIdsArrForClassName($table_id, $model_class_name, $filters_arr, $order_by); foreach ($objs_ids_arr as $obj_id) { $obj_obj = CRUDObjectLoader::createAndLoadObject($model_class_name, $obj_id); /** @var InterfaceCRUDTableColumn $column_obj */ echo '<tr>'; foreach ($column_obj_arr as $column_obj) { Assert::assert($column_obj instanceof InterfaceCRUDTableColumn); /** @var InterfaceCRUDTableWidget $widget_obj */ $widget_obj = $column_obj->getWidgetObj(); Assert::assert($widget_obj); Assert::assert($widget_obj instanceof InterfaceCRUDTableWidget); $col_width_attr = ''; if ($widget_obj instanceof CRUDTableWidgetDelete) { $col_width_attr = ' width="1px" '; } if ($widget_obj instanceof CRUDTableWidgetWeight) { $col_width_attr = ' width="1px" '; } echo '<td ' . $col_width_attr . ' style="word-break: break-all;">'; echo $widget_obj->html($obj_obj); echo '</td>'; } echo '</tr>'; } echo '</tbody>'; echo '</table>'; echo Pager::renderPager($table_id, count($objs_ids_arr)); echo '</div>'; if ($filters_position == self::FILTERS_POSITION_RIGHT) { echo '<div class="col-sm-4">'; echo self::filtersHtml($table_id, $filters_arr); echo '</div>'; } echo '</div>'; }); // Загрузка скриптов $html .= CRUDTableScript::getHtml($table_container_element_id, Url::getCurrentUrlNoGetForm()); return $html; }
/** * Returns sanitized content. * @param $obj * @return mixed */ public function html($obj) { $timestamp = CRUDCompiler::compile($this->getTimestamp(), ['this' => $obj]); $date = date($this->getFormat(), $timestamp); return Sanitize::sanitizeTagContent($date); }
/** * Returns sanitized content. * @param $obj * @return mixed */ public function html($obj) { $html = CRUDCompiler::compile($this->getText(), ['this' => $obj]); return Sanitize::sanitizeTagContent($html); }
public static function render($content_html, $action_obj = null) { $page_toolbar_html = ''; // запрашиваем до начала вывода на страницу, потому что там может редирект или какая-то еще работа с хидерами if ($action_obj) { if ($action_obj instanceof \OLOG\Layouts\InterfacePageToolbarHtml) { $page_toolbar_html = $action_obj->pageToolbarHtml(); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title></title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> </head> <body> <div class="container"> <?php //$application_title = BTConfig::getApplicationTitle(); $application_title = 'Home'; $menu_items_arr = []; if ($action_obj instanceof InterfaceMenu) { $menu_items_arr = $action_obj::menuArr(); } ?> <nav class="navbar navbar-inverse"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"><?php echo $application_title; ?> </a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <?php foreach ($menu_items_arr as $menu_item_obj) { \OLOG\Assert::assert($menu_item_obj instanceof \OLOG\Layouts\MenuItem); $children_arr = $menu_item_obj->getChildrenArr(); $href = 'href="#"'; if ($menu_item_obj->getUrl()) { $href = 'href="' . Sanitize::sanitizeUrl($menu_item_obj->getUrl()) . '"'; } $icon = ''; if ($menu_item_obj->getIconClassesStr()) { $icon = '<i class="' . $menu_item_obj->getIconClassesStr() . '"></i> '; } if (count($children_arr)) { ?> <li class="dropdown"> <a <?php echo $href; ?> class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <?php echo $icon . Sanitize::sanitizeTagContent($menu_item_obj->getText()); ?> <span class="caret"></span> </a> <ul class="dropdown-menu"> <?php /** @var $child_menu_item_obj \OLOG\Layouts\MenuItem */ foreach ($children_arr as $child_menu_item_obj) { \OLOG\Assert::assert($child_menu_item_obj instanceof \OLOG\Layouts\MenuItem); $children_href = ''; if ($child_menu_item_obj->getUrl()) { $children_href = 'href="' . Sanitize::sanitizeUrl($child_menu_item_obj->getUrl()) . '"'; } $children_icon = ''; if ($child_menu_item_obj->getIconClassesStr()) { $children_icon = '<i class="' . $child_menu_item_obj->getIconClassesStr() . '"></i> '; } ?> <li> <a <?php echo $children_href; ?> ><?php echo $children_icon . Sanitize::sanitizeTagContent($child_menu_item_obj->getText()); ?> </a> </li> <?php } ?> </ul> </li> <?php } else { ?> <li> <a <?php echo $href; ?> ><?php echo $icon . Sanitize::sanitizeTagContent($menu_item_obj->getText()); ?> </a> </li> <?php } } ?> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> <?php $h1_str = ''; //$breadcrumbs_arr = ConfWrapper::getOptionalValue(\OLOG\BT\BTConstants::MODULE_NAME . '.' . \OLOG\BT\BTConstants::BREADCRUMBS_PREFIX_ARR, []); //$breadcrumbs_arr = BTConfig::getBreadcrumbsPrefixArr(); $breadcrumbs_arr = []; if ($action_obj) { /* if ($action_obj instanceof InterfaceBreadcrumbs) { $breadcrumbs_arr = array_merge($breadcrumbs_arr, $action_obj->currentBreadcrumbsArr()); } */ if ($action_obj instanceof \OLOG\Layouts\InterfaceTopActionObj) { $top_action_obj = $action_obj->topActionObj(); $extra_breadcrumbs_arr = []; while ($top_action_obj) { $top_action_title = '#NO_TITLE#'; if ($top_action_obj instanceof \OLOG\Layouts\InterfacePageTitle) { $top_action_title = $top_action_obj->pageTitle(); } $top_action_url = '#NO_URL#'; if ($top_action_obj instanceof InterfaceAction) { $top_action_url = $top_action_obj->url(); } array_unshift($extra_breadcrumbs_arr, HTML::a($top_action_url, $top_action_title)); $top_action_obj = null; if ($top_action_obj instanceof \OLOG\Layouts\InterfaceTopActionObj) { $top_action_obj = $top_action_obj->topActionObj(); } } $breadcrumbs_arr = array_merge($breadcrumbs_arr, $extra_breadcrumbs_arr); } if ($action_obj instanceof \OLOG\Layouts\InterfacePageTitle) { $h1_str = $action_obj->pageTitle(); } } if (!empty($breadcrumbs_arr)) { echo BT::breadcrumbs($breadcrumbs_arr); } ?> <div class="page-header"> <h1> <?php echo $h1_str; ?> <?php if ($page_toolbar_html != '') { echo '<span>' . $page_toolbar_html . '</span>'; } ?> </h1> </div> <?php echo $content_html; ?> </div> </body> </html> <?php }