Files
OMS/app/desktop/lib/finder/builder/panel/render.php
2025-12-28 23:13:25 +08:00

127 lines
4.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
class desktop_finder_builder_panel_render
{
private $finder;
function __contruct($finder_aliasname){
$this->finder = $finder;
$this->finder_aliasname = $finder_aliasname;
}
/**
* 设置Finder
* @param mixed $finder finder
* @return mixed 返回操作结果
*/
public function setFinder($finder) {
$this->finder = $finder;
}
function main($object_name,$app,$filter=null,$controller=null,$cusrender=null){
if(strpos($_GET['object'],'@')!==false){
$tmp = explode('@',$object_name);
$app = app::get($tmp[1]);
$object_name = $tmp[0];
}
$object = $app->model($object_name);
$ui = new base_component_ui($this->controller,$app);
require(APP_DIR.'/base/datatypes.php');
$this->dbschema = $object->get_schema();
$finder_id = $_GET['_finder']['finder_id'];
foreach(kernel::servicelist('extend_filter_'.get_class($object)) as $extend_filter){
$colums = $extend_filter->get_extend_colums($this->finder_aliasname);
if($colums[$object_name]){
$this->dbschema['columns'] = array_merge((array)$this->dbschema['columns'],(array)$colums[$object_name]['columns']);
}
}
foreach($this->dbschema['columns'] as $c=>$v){
if(!$v['filtertype']) continue;
if( isset($filter[$c]) ) {
continue;
}
if(!is_array($v['type']))
if(strpos($v['type'],'decimal')!==false&&$v['filtertype']=='number'){
$v['type'] = 'number';
}
$columns[$c] = $v;
if(!is_array($v['type']) && $v['type']!='bool' && isset($datatypes[$v['type']]) && isset($datatypes[$v['type']]['searchparams'])){
$addon='<select search="1" name="_'.$c.'_search" class="x-input-select inputstyle">';
foreach($datatypes[$v['type']]['searchparams'] as $n=>$t){
$addon.="<option value='{$n}'>{$t}</option>";
}
$addon.='</select>';
}elseif($v['type'] == 'skunum'){
$addon='<select search="1" name="_'.$c.'_search" class="x-input-select inputstyle">';
$__select = array('nequal'=>app::get('base')->_('='),'than'=>app::get('base')->_('>'),'lthan'=>app::get('base')->_('<'));
foreach($__select as $n=>$t){
$addon.="<option value='{$n}'>{$t}</option>";
}
$addon.='</select>';
}else{
if($v['type']!='bool')
$addon = app::get('desktop')->_('是');
else $addon = '';
}
$columns[$c]['addon'] = $addon;
if($v['type']=='last_modify'){
$v['type'] = 'time';
}
$params = array(
'type'=>$v['type'],
'name'=>$c,
);
if($v['type']=='bool'&&$v['default']){
$params = array_merge(array('value'=>$v['default']),$params);
}
if($this->name_prefix){
$params['name'] = $this->name_prefix.'['.$params['name'].']';
}
if($v['type']=='region'){
$params['app'] = 'eccommon';
}
$inputer = $ui->input($params);
$columns[$c]['inputer'] = $inputer;
}
if($cusrender){
return array('filter_cols'=>$columns,'filter_datatypes'=>$datatypes);
}
$render = new base_render(app::get('desktop'));
if($object->has_tag){
$render->pagedata['app_id'] = $app->app_id;
$render->pagedata['tag_type'] = $object_name;
$tag_inputer = $render->fetch('finder/tag_inputer.html');
$columns['tag'] = array('filtertype'=>true,'filterdefault'=>true,'label'=>app::get('desktop')->_('标签'),'inputer'=>$tag_inputer);
}
if(is_null($this->finder)) {
$render->pagedata['panel_id'] = '_c';
} else {
$render->pagedata['panel_id'] = $this->finder->getId();
}
$render->pagedata['columns'] = $columns;
$render->pagedata['datatypes'] = $datatypes;
$render->pagedata['finder_id'] = $finder_id;
return $render->display($this->finder->getFile(), $app->app_id, true);
}
}