/** * (non-PHPdoc) * @Description: setFormField(通过数据库字典生成list相关信息) * @param $listFieldVal array list文件配置字段信息 * @author yangxi 2014-12-12 * @see CommonAction::update() */ public function setFormInfo($modelname) { $formList = array(); //初始化存储表单元素数组 //获取form字段的组件信息 $formid = M('mis_dynamic_form_manage')->where("actionname= '" . $modelname . "'")->getfield('id'); if ($formid) { //$result=D("MisDynamicFormProperyAndSubView")->where("formid= '".$formid."'")->select(); $sql = "SELECT\n mis_dynamic_form_propery.`id` AS `id`,\n mis_dynamic_form_propery.`showoption` AS `showoption`,\n mis_dynamic_form_propery.`subimporttableobj` AS `subimporttableobj`,\n mis_dynamic_form_propery.`subimporttablefieldobj` AS `subimporttablefieldobj`,\n mis_dynamic_form_propery.`subimporttablefield2obj` AS `subimporttablefield2obj`,\n mis_dynamic_form_propery.`subimporttableobjcondition` AS `subimporttableobjcondition`,\n mis_dynamic_form_propery.`treedtable` AS `treedtable`,\n\t \t\t\t mis_dynamic_form_propery.`dateformat` AS `dateformat`,\n mis_dynamic_form_propery.`lookupfiledback` AS `lookupfiledback`,\n mis_dynamic_form_propery.`lookupgrouporg` AS `lookupgrouporg`,\n\t \t\t\t \t\t mis_dynamic_form_propery.`org` AS `org`,\n mis_dynamic_form_propery.`org1` AS `org1`,\n mis_dynamic_form_propery.`lookupurls` AS `lookupurls`,\t \t\t\t\t \t\t\t\n mis_dynamic_form_propery.`lookupmodel` AS `lookupmodel`,\n mis_dynamic_form_propery.`lookupshoworg` AS `lookupshoworg`,\n mis_dynamic_form_propery.`lookuporgval` AS `lookuporgval`,\t \t\t\t\t \t\t\t \t\t\t\n mis_dynamic_form_propery.`lookupconditions` AS `lookupconditions`,\n mis_dynamic_form_propery.`lookupchoice` AS `lookupchoice`,\n mis_dynamic_form_propery.`viewname` AS `viewname`,\n mis_dynamic_form_propery.`viewtype` AS `viewtype`,\t\n\t \t\t\t mis_dynamic_form_propery.`org` AS `org`,\n\t \t\t\t\t mis_dynamic_form_propery.`unit` AS `unit`,\t \t\t\t\t \t\t\t\t \t\t\t\n\t \t\t\t mis_dynamic_form_propery.`unitls` AS `unitls`,\n mis_dynamic_form_propery.`title` AS `title`,\n mis_dynamic_form_propery.`category` AS `category`,\n mis_dynamic_form_propery.`fieldname` AS `fieldname`,\n mis_dynamic_form_propery.`ids` AS `ids`,\n mis_dynamic_form_propery.`formid` AS `formid`,\n mis_dynamic_form_propery.`tplid` AS `tplid`,\n mis_dynamic_form_propery.`status` AS `status`,\n\t \t\t\t\t\t mis_dynamic_form_propery.`islock` AS `islock`,\n\t \t\t\t\t\t mis_dynamic_form_propery.`isrequired` AS `isrequired`,\n\t \t\t\t\n\t \t\t\tmis_dynamic_form_propery.`treedtable`\t\t\t\t\t\tAS `treedtable`,\n\t \t\t\tmis_dynamic_form_propery.`treevaluefield` AS `treevaluefield`,\n\t \t\t\tmis_dynamic_form_propery.`treeshowfield` AS `treeshowfield`,\n\t \t\t\tmis_dynamic_form_propery.`treeparentfield` AS `treeparentfield`,\n\t \t\t\tmis_dynamic_form_propery.`isnextend` \t\t\tAS `isnextend`,\n\t \t\t\tmis_dynamic_form_propery.`mulit` \t\t\t\tAS `mulit`,\n\t \t\t\tmis_dynamic_form_propery.`treeheight` \t\tAS `treeheight`,\n\t \t\t\tmis_dynamic_form_propery.`treewidth` \t\t\tAS `treewidth`,\n\t \t\t\t\n\t \t\t\t\t\tmis_dynamic_form_propery.`additionalconditions`\t\t\t\t\t\t\t\tAS `addconditions`,\n mis_dynamic_database_sub.`field` AS `field`,\n mis_dynamic_database_sub.`formid` AS `subformid`\n FROM mis_dynamic_form_propery mis_dynamic_form_propery\n LEFT JOIN mis_dynamic_database_sub mis_dynamic_database_sub\n ON mis_dynamic_form_propery.`ids` = mis_dynamic_database_sub.`id`\n WHERE mis_dynamic_form_propery.formid = " . $formid; //M('mis_dynamic_database_sub')->where("formid= '".$formid."'")->select(); $formList = $this->query($sql); // print_r($this->getLastSql());exit; // print_r($formList); // echo 123; foreach ($formList as $key => $val) { if (!empty($val['fieldname'])) { $temp = array(); //组件name,用来提交数据的 $temp["template_name"] = "datatable[#index#][table][" . $val['fieldname'] . "]"; $temp["template_data"] = ""; $temp["template_class"] = $val["isrequired"] ? "required" : ""; $temp["template_key"] = ""; $temp["is_readonly"] = $val["islock"] ? "" : "true"; switch ($val['category']) { case "text": $temp["template_key"] = "input"; $template_data = array(); //获取ORG参数 if (!empty($val['org'])) { $org = explode(".", $val['org']); $template_data["bindlookupname"] = $org[0]; $template_data["upclass"] = $org[1]; } if (!empty($val['unitls'])) { //存储的单位编码 $template_data["unitl"] = $val['unitls']; //获取单位编码中文名 $template_data["unitlname"] = getFieldBy($val['unitls'], 'danweidaima', 'danweimingchen', 'mis_system_unit'); } $temp["template_data"] = json_encode($template_data); //列是否统计 $temp["is_stats"] = false; //小数位数 $temp["stats_num"] = 2; break; case "select": //获取ORG参数 if (!empty($val['org'])) { $org = explode(".", $val['org']); $bindlookup = array("lookupname" => $org[0], "name" => $org[1]); $temp["bindlookup"] = json_encode($bindlookup); } /* * 下拉树配置 * */ if ($val['treedtable'] && $val['treevaluefield'] && $val['treeshowfield'] && $val['treeparentfield']) { $chkStyle = "radio"; // 单选,多选 if ($val["mulit"] == 1) { $chkStyle = "checkbox"; } $isnextend = $val['isnextend'] == 1 ? 1 : 0; // 获取下拉树的显示数据 $treeData = getControllbyHtml("table", array("type" => "select", "table" => $val['treedtable'], "id" => $val['treevaluefield'], "name" => $val['treeshowfield'], "showtype" => "1", "comboxtree" => "1", "parentid" => $val['treeparentfield'], "isnextend" => $isnextend)); $dataSouceArr = '{"treeconfig":' . '{"expandAll":false,' . '"checkEnable":true,' . '"chkStyle":"' . $chkStyle . '",' . '"radioType":"all",' . '"onClick":"S_NodeClick",' . '"onCheck":"S_NodeCheck"},' . '"treeheight":"' . $val['treeheight'] . '",' . '"treewidth":"' . $val['treewidth'] . '",' . '"treedata":' . $treeData . '}'; $temp["template_data"] = $dataSouceArr; $temp["template_key"] = "selecttree"; } else { $temp["template_key"] = "select"; $temp["template_data"] = "["; $abc = $this->getSelectSource($val); foreach ($abc as $skey => $sval) { $temp["template_data"] .= '{"value":"' . $skey . '","name":"' . $sval . '"},'; } //去掉最后一个, $temp["template_data"] = $abc ? substr($temp["template_data"], 0, -1) . "]" : $temp["template_data"] . "]"; //数据格式例子 //$temp["template_data"] = '[{"value":1,"name":"第一人"},{"value":2,"name":"第二人"}]'; } break; case "lookup": $temp["template_key"] = "lookup"; $abc = $this->getLookupSource($val); //upclass:查找带回显示字段,格式 string class="textInput enterIndex readonly into_table_new9122317_wrapperorgfandanbaocuoshibianhao11.name" class里 org.name //callback是回调函数 param是传递到lookupGeneral函数的参数,格式 string 例:param="field=orderno,pid,name,id&model=MisSaleProfession&newconditions=" //herf是请求地址 格式 string 例:href="/workarea/workstation/systemui/product/Admin/index.php/MisAutoDap/lookupGeneral" //hidden_data:隐藏的存入数据库字段的值 格式 :[{"upclass":"","name":"datatable[#index#][datatable1][sinianji]"}],其中upclass是查找带回存储字段,name是隐藏输入入框的name,[datatable1][sinianji]表名,字段名 $param = ""; //初始化参数 $param .= "lookupchoice=" . $val['lookupchoice']; //传Key值 unset($lookuporg0); unset($lookuporg1); $lookuporg0 = explode('.', $val['org']); $lookuporg1 = explode('.', $val['org1']); $bindlookupname = $lookuporg1[0] ? $lookuporg1[0] : $lookuporg0[0]; $param .= ''; // //lookup带回字段 // $param.="field=".$val['lookupfiledback']; // //lookup的模型对象 // $param.="&model=".$val['lookupmodel']; //过滤条件 ////////////////////////////////////////////////////////////////////////////////////////////// unset($conditionConfigJson); unset($appendCondtion); unset($additionalconditions); unset($formFiledList); unset($sysFieldList); unset($sysFieldFmt); unset($appendCondtionArr); unset($appendCondtionStr); unset($conditions); unset($formFiledFmt); $additionalconditions = $val['addconditions']; if ($additionalconditions) { $appendCondtion = unserialize(base64_decode($additionalconditions)); // proexp 表单字段列表 // sysexp 系统字段列表 $formFiledList = $appendCondtion['proexp']; $sysFieldList = $appendCondtion['sysexp']; // $formFiledFmt=array(); // $sysFieldFmt = array(); $sysFieldFmt = unserialize($sysFieldList) or array(); // 获取真实的表单字段名。 if ($formFiledList) { $formFiledListArr = unserialize($formFiledList) or array(); if (is_array($formFiledListArr) && count($formFiledListArr)) { $formFiledKey = array_keys($formFiledListArr); $properModel = M('mis_dynamic_form_propery'); $properMap['id'] = array('in', $formFiledKey); unset($fd); $fd = $properModel->where($properMap)->field('fieldname,id')->select(); if ($fd) { foreach ($fd as $k => $v) { // $fieldArr[] = $v['fieldname']; if ($formFiledListArr[$v['id']] == -1) { $formFiledFmt[$v['fieldname']] = $v['fieldname']; } else { $formFiledFmt[$v['fieldname']] = $formFiledListArr[$v['id']]; } } } } } if (is_array($sysFieldFmt) && is_array($formFiledFmt)) { $appendCondtionArr = array_merge($sysFieldFmt, $formFiledFmt); } elseif (is_array($sysFieldFmt) && !is_array($formFiledFmt)) { $appendCondtionArr = $sysFieldFmt; } elseif (!is_array($sysFieldFmt) && is_array($formFiledFmt)) { $appendCondtionArr = $formFiledFmt; } else { $appendCondtionArr = array(); } // 将条件转换为可用的sql where语句 $appendCondtionStr = arr2string($appendCondtionArr); logs($val['fieldname'] . $appendCondtionStr, 'rinidaye'); //$conditions = "{:getAppendCondition(\$vo ,$appendCondtionStr)}"; $conditions = getAppendCondition($vo, $appendCondtionArr); if (is_array($appendCondtionArr)) { unset($tempData); foreach ($appendCondtionArr as $k => $v) { $tempData[$v] = $k; } $conditionConfigJson = ',"condition":' . json_encode($tempData); } } //////////////////////////////////////////////////////////////////// $param .= "&newconditions=" . $conditions; $val['callback'] = "lookup_counter_check"; //herf路径 $herf = __APP__ . '/' . $modelname . '/' . $val['lookupurls']; $temp["template_data"] = '{"bindlookupname":"' . $bindlookupname . '","upclass":"' . $val['lookupshoworg'] . '","lporder":"' . $lookuporg1[1] . '","lpkey":"' . $val['lookupchoice'] . '","callback":"' . $val['callback'] . '","param":"' . $param . '","lookupname":"' . $val['lookupgrouporg'] . '","href":"' . $herf . '","hidden_data":[{"upclass":"' . $val['lookuporgval'] . '","lporder":"' . $lookuporg0[1] . '","name":"datatable[#index#][table][' . $val['fieldname'] . ']"}]' . $conditionConfigJson . '}'; break; case "date": $temp["template_key"] = "date"; //日期格式 if (empty($val['format'])) { $val['dateformat'] = "yyyy-MM-dd"; } else { $formatTemp = explode('@', $val['dateformat']); $val['dateformat'] = $formatTemp[0]; } $temp["template_data"] = '{"format":"' . $val['dateformat'] . '"}'; break; case "upload": $temp["template_key"] = "uploadfilenew"; $temp["template_data"] = '{"url":"__URL__/DT_uploadnew"}'; break; default: break; } $th_html = array(); foreach ($temp as $k => $v) { $th_html[] = $k . "='" . $v . "'"; } $th_html = implode(" ", $th_html); $val['datatable'] = $th_html; $list[$val["fieldname"]] = $val; } } } $this->SetRules($list, $modelname, $typename = "form"); }
/** * $data[0] $controllType 组件类型 lookup , lookupsuper * $data[1] $vo 页面vo数据 * $data[2] $controllProperty 当前组件的属性ID或属性数组 * $data[3] $isedit 是否为修改操作页面 * $data[4] $isreturnvalue 是否为view操作页面 * $data[5] $ganshe 干涉页面 状态归0 * @see Widget::render() */ public function render($data) { /** 数据收集 */ unset($vo); $controllType = $data[0]; //组件类型 lookup , lookupsuper $vo = $data[1]; //页面vo数据 $controllProperty = $data[2]; //当前组件的属性ID或属性数组 $isedit = $data[3]; //是否为修改操作页面 $isreturnvalue = $data[4]; //是否为view操作页面 $ganshe = $data[5]; //干涉页面 状态归0 $ismuchchoice = $data[6]; //是否多选 1是0否 /** 数据处理 */ $dir = CONF_PATH; $controlls = (require $dir . 'controlls.php'); require $dir . 'property.php'; $privateProperty = array(); foreach ($controlls as $key => $val) { if ($val['property']) { $privateProperty[$key] = array_merge($NBM_COMMON_PROPERTY, $val['property']); } else { $privateProperty[$key] = $NBM_COMMON_PROPERTY; } } $property = $privateProperty['lookup']; switch ($controllType) { case 1: $controllType = 'lookup'; break; case 2: $controllType = 'lookupsuper'; default: $controllType = 'lookup'; break; } if (!is_array($controllProperty)) { $obj = M('mis_dynamic_form_propery'); $controllProperty = $obj->where('id=' . $controllProperty)->find(); if ($ganshe == '1') { $controllProperty[$property['islock']['dbfield']] = 1; $controllProperty[$property['requiredfield']['dbfield']] = 1; $controllProperty[$property['isshow']['dbfield']] = 0; } } if (!is_array($controllProperty)) { return '<error>Lookup组件配置错误/没有属性<error>'; } /** 开始lookup属性解析 */ if (!$isreturnvalue) { $chtml = ''; if ($controllProperty[$property['checkfunc']['dbfield']]) { $chtml = $controllProperty[$property['checkfunc']['dbfield']]; } $required = ''; // 必填验证 if ($controllProperty[$property['requiredfield']['dbfield']] && $ganshe != '1') { $required = 'required'; } $chtml = $required . 'nbm ' . $chtml; //获取lookup key值 动态加载lookup配置 $lookupchoice = $controllProperty[$property['lookupchoice']['dbfield']]; $lookupObj = D('LookupObj'); $lookupDetail = $lookupObj->GetLookupDetail($lookupchoice); //var_dump($lookupDetail['condition']); $defaultLookupCondition = $lookupDetail['condition']; // lookup配置时生成的过滤条件。 $model = $lookupDetail['mode']; $urls = $lookupDetail['url']; $lookupgroup = $controllProperty[$property['lookupgroup']['dbfield']]; //视图特殊处理 if ($lookupDetail["viewname"]) { $viewname = $lookupDetail["viewname"]; //视图名称 $viewsavefield = $lookupDetail["val"]; //视图显示字段 $viewshowfield = $lookupDetail["filed"]; //视图存储字段 $dataViewModel = M("mis_system_dataview_mas"); $viewsql = "SELECT s.field FROM mis_system_dataview_mas AS m LEFT JOIN mis_system_dataview_sub AS s ON m.id=s.masid WHERE m.status=1 and s.status=1 and m.`name`='{$viewname}' AND s.otherfield="; //存储字段 $savefieldviewsql = $viewsql . "'{$viewsavefield}' limit 1"; $savefieldviewfieldarr = $dataViewModel->query($savefieldviewsql); $savefieldviewfieldexplode = explode(".", $savefieldviewfieldarr[0]['field']); $savefieldviewtable = $savefieldviewfieldexplode[0]; //存储字段所在的真实表名 $orgval = $savefieldviewfieldexplode[1]; //存储字段真实字段名 //显示字段 $showfieldviewsql = $viewsql . "'{$viewshowfield}' limit 1"; $showfieldviewfieldarr = $dataViewModel->query($showfieldviewsql); $showfieldviewfieldexplode = explode(".", $showfieldviewfieldarr[0]['field']); $showfieldviewtable = $showfieldviewfieldexplode[0]; //显示字段所在的真实表名 $orgchar = $showfieldviewfieldexplode[1]; //显示字段真实字段名 } else { $orgval = $lookupDetail['val'] ? $lookupDetail['val'] : 'id'; $orgchar = $lookupDetail['filed'] ? $lookupDetail['filed'] : 'name'; } $orgLookuoVal = $controllProperty[$property['org']['dbfield']]; // 值 value $orgLookupText = $controllProperty[$property['org1']['dbfield']]; // 显示内容 text $readonly = $controllProperty[$property['islock']['dbfield']] == 1 ? false : true; $view = ''; if ($lookupDetail['viewname']) { $view = '&viewname=' . $lookupDetail['viewname']; } if ($lookupDetail['dt']) { $dtcon = '&lookuptodatatable=2'; } $muchchoice = ''; if ($ismuchchoice == 1) { $muchchoice = '&ismuchchoice=' . $ismuchchoice; } // lookup的值反写 $textCounterCheck = ''; // 显示文本的反写 text $valCounterCheck = ''; // 值的反写 value // lporder 从外部lookup中取值字段 // lpkey 当前lookup的key // lpfor 往哪个东西里写值 // lpself 当前项的字段名称 if ($orgLookuoVal) { unset($temp); $temp = explode('.', $orgLookuoVal); $valCounterCheck = "callback=\"lookup_counter_check\" lpkey=\"{$lookupchoice}\" lpfor=\"{$lookupgroup}.{$orgchar}\" lpself=\"{$orgval}\" lporder=\"{$temp[1]}\""; } if ($orgLookupText) { unset($temp); $temp = explode('.', $orgLookupText); $textCounterCheck = "callback=\"lookup_counter_check\" lpkey=\"{$lookupchoice}\" lpfor=\"{$lookupgroup}.{$orgval}\" lpself=\"{$orgchar}\" lporder=\"{$temp[1]}\""; } // lookup附加条件处理 $appendCondtionArr = array(); $appendCondtion = $controllProperty[$property['additionalconditions']['name']]; // 附加条件设置信息 if ($appendCondtion) { $appendCondtion = unserialize(base64_decode($appendCondtion)); // proexp 表单字段列表 // sysexp 系统字段列表 $formFiledList = $appendCondtion['proexp']; $sysFieldList = $appendCondtion['sysexp']; // $formFiledFmt=array(); // $sysFieldFmt = array(); $sysFieldFmt = unserialize($sysFieldList) or array(); // 获取真实的表单字段名。 if ($formFiledList) { $formFiledListArr = unserialize($formFiledList) or array(); if (is_array($formFiledListArr) && count($formFiledListArr)) { $formFiledKey = array_keys($formFiledListArr); $properModel = M('mis_dynamic_form_propery'); $properMap['id'] = array('in', $formFiledKey); $fd = $properModel->where($properMap)->field('fieldname,id')->select(); if ($fd) { foreach ($fd as $k => $v) { // $fieldArr[] = $v['fieldname']; if ($formFiledListArr[$v['id']] == -1) { $formFiledFmt[$v['fieldname']] = $v['fieldname']; } else { $formFiledFmt[$v['fieldname']] = $formFiledListArr[$v['id']]; //$formFiledFmt[$formFiledListArr[$v['id']]] = $v['fieldname']; } } } } } if (is_array($sysFieldFmt) && is_array($formFiledFmt)) { $appendCondtionArr = array_merge($sysFieldFmt, $formFiledFmt); } elseif (is_array($sysFieldFmt) && !is_array($formFiledFmt)) { $appendCondtionArr = $sysFieldFmt; } elseif (!is_array($sysFieldFmt) && is_array($formFiledFmt)) { $appendCondtionArr = $formFiledFmt; } else { $appendCondtionArr = array(); } $conditions = getAppendCondition($vo, $formFiledFmt); $systemconditionsTemp = getAppendCondition($vo, $sysFieldFmt); // if($defaultLookupCondition){ // $systemconditions = $defaultLookupCondition; // if($systemconditionsTemp){ // $systemconditions .= ' and '.$systemconditionsTemp; // } // }else{ // $systemconditions = $systemconditionsTemp; // } $systemconditions = $systemconditionsTemp; } $val = ''; $tempModel = D($model); $temptable = ''; //视图时取字段对应的真实字段所在真实表名 if ($lookupDetail["viewname"]) { $temptable = $savefieldviewtable; } else { $temptable = $tempModel->getTableName(); } $map = ''; $value = $vo[$controllProperty[$property['fields']['dbfield']]]; if ($value) { if (strpos($value, ',')) { $valueStr = explode(',', $value); $map = $orgval . " in ('" . join("','", $valueStr) . "')"; } else { $map = $orgval . "='" . $value . "'"; } } //$viewval = $isedit ?(getFieldBy($value , $orgval , $orgchar , $tempModel->getTableName())):''; // if(!$map){ // $viewval=''; // }else{ // $viewval = $isedit ?(getFieldData($orgchar , $temptable , $map , true , 1000)):''; // } //多做了个分支,主要是应付视图里储存字段不唯一的情况 /** *当储存字段(以orderno=06为例)查询结果有n条记录,显示字段(以type为例)可以和储存字段保证一致性(当orderno=06时,查出的type全部都是“请假”) */ if (!$map) { $viewval = ''; } else { if (strpos($value, ',')) { $viewval = $isedit ? getFieldData($orgchar, $temptable, $map, true, 1000) : ''; } else { $viewval = $isedit ? getFieldBy($value, $orgval, $orgchar, $temptable) : ''; // } } $html = "<div class=\"tml-input-lookup\">"; $paramsEcho = arr2string($map); $controllPropertyEcho = '字段名:' . $controllProperty[$property['fields']['dbfield']] . '__表名:' . $tempModel->getTableName(); // $html.=<<<EOF // <script> // console.log("lookup查询条件:{$controllPropertyEcho}--{$orgchar}--查询条件:{$paramsEcho} 修改状态:{$isedit}"); // </script> // EOF; $readonlyCls = 'active_lookup'; if ($readonly) { $readonlyCls = ''; } $html .= "<input type=\"text\" {$textCounterCheck} class=\"{$lookupgroup}.{$orgchar} {$chtml} input_new half_angle_input {$orgLookupText} {$readonlyCls} \" autocomplete=\"off\" readonly=\"readonly\" value=\"" . $viewval . "\" />"; $html .= "<input type=\"hidden\" {$valCounterCheck} class=\"{$required} {$lookupgroup}.{$orgval} {$orgLookuoVal}\" name=\"" . $controllProperty[$property['fields']['dbfield']] . "\" value=\"" . $vo[$controllProperty[$property['fields']['dbfield']]] . "\" />"; if ($readonly) { // 只读情况 // lookup 触发按钮 $html .= "<a class=\"icon_elm mid_icon_elm icon-plus\"></a>"; // $title // 清空 lookup 按钮 $html .= "<a title=\"清空信息-只读\" class=\"icon_elm icon-trash\" href=\"javascript:void(0);\"></a>"; } else { $formFiledFmt = array_flip($formFiledFmt); $conditionOprateString = "condition=\"\""; if (is_array($formFiledFmt)) { $conditionOprateString = "condition=" . json_encode($formFiledFmt); } // lookup 触发按钮 $html .= "<a class=\"icon_elm mid_icon_elm icon-plus\" syscondition=\"{$systemconditions}\" newconditions=\"{$conditions}\" ismuchchoice=\"{$ismuchchoice}\" {$conditionOprateString} param=\"lookupchoice={$lookupchoice}{$muchchoice}&newconditions={$view}{$dtcon}\" href=\"__URL__/{$urls}\" lookupGroup=\"{$lookupgroup}\" ></a>"; //$title // 清空 lookup 按钮 $html .= "<a title=\"清空信息-可读写\" class=\"icon_elm icon-trash\" href=\"javascript:void(0);\" onclick=\"clearOrg('{$lookupgroup}');\"></a>"; } $html .= "</div>"; } else { $func = ""; $parmFunc = array(); // 处理子表及主表的lookup值转换 , modify by nbmxkj at 20150127 20 // *****注意:func 与 funcdata 数组项一定要个数对应。**** $scdmodel = D('SystemConfigDetail'); $detailList = $scdmodel->getDetail(MODULE_NAME, '', '', '', 'status'); $dval = $detailList[$controllProperty[$property['fields']['dbfield']]]; if (is_array($dval)) { if (count($dval['func']) > 0) { $varchar = ""; foreach ($dval['func'] as $k3 => $v3) { //开始html字符 if (isset($dval['extention_html_start'][$k3])) { $varchar = $dval['extention_html_start'][$k3]; } //中间内容 $varchar .= getConfigFunction($vo[$dval['name']], $v3, $dval['funcdata'][$k3], $vo); if (isset($dval['extention_html_end'][$k3])) { $varchar .= $dval['extention_html_end'][$k3]; } //结束html字符 } $html = $varchar; } else { $viewval = $vo[$controllProperty[$property['fields']['dbfield']]]; $html = $viewval; } } } return $html; }
/** * @Title: createAction * @Description: todo(生成Action代码) * @param array $fieldData 组件属性列表 * @param string $cotrollname 控制器名称 * @param boolean $add 是否覆盖现有文件,默认为false:需要覆盖 * @param boolean $isaudit 是否带审批流,默认为false:不带审批流 * @param boolean $isinitExtendAction 是否初始化扩展Action代码 默认为空,不初始化【为组合表单的初化解绑准备】 * @author quqiang * @date 2014-8-21 上午10:03:39 * @throws */ function createAction($fieldData, $cotrollname, $add = false, $isaudit = false, $isinitExtendAction = false) { $cotrollname = ucfirst($cotrollname); $actionPath = LIB_PATH . "Action/" . $cotrollname . "Action.class.php"; $actionExtendPath = LIB_PATH . "Action/" . $cotrollname . "ExtendAction.class.php"; $isExist = file_exists($actionPath); if ($isExist && $add) { $this->error($actionPath . "文件已存在!"); } $extendphpcode .= "<?php\r\n/**"; $extendphpcode .= "\r\n * @Title: {$cotrollname}Action"; $extendphpcode .= "\r\n * @Package package_name"; $extendphpcode .= "\r\n * @Description: todo(动态表单_扩展类。本类为用户代码注入入口,系统一旦生成将不再重复生成。"; $extendphpcode .= "\r * \t\t\t\t\t\t但当用户选为组合表单方案后会更新该文件,请做好备份)"; $extendphpcode .= "\r\n * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n * @company Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d"; $extendphpcode .= "\r\n * @copyright 本文件归属于Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d"; $extendphpcode .= "\r\n * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n * @version V1.0"; $extendphpcode .= "\r\n*/"; $extendphpcode .= "\r\nclass "; $phpcode .= "<?php\r\n/**"; $phpcode .= "\r\n * @Title: {$cotrollname}Action"; $phpcode .= "\r\n * @Package package_name"; $phpcode .= "\r\n * @Description: todo(动态表单_自动生成-" . $this->nodeTitle . ")"; $phpcode .= "\r\n * @author " . $_SESSION['loginUserName']; $phpcode .= "\r\n * @company Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d"; $phpcode .= "\r\n * @copyright 本文件归属于Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d"; $phpcode .= "\r\n * @date " . date('Y-m-d H:i:s'); $phpcode .= "\r\n * @version V1.0"; $phpcode .= "\r\n*/"; $phpcode .= "\r\nclass "; if ($isaudit) { $jcc = "CommonAuditAction"; } else { $jcc = "CommonAction"; } $extendsCC = $cotrollname . "ExtendAction"; $extendphpcode .= $cotrollname . "ExtendAction extends " . $jcc . " {\r\n"; $phpcode .= $cotrollname . "Action extends " . $extendsCC . " {\r\n"; $phpcode .= "\tpublic function _filter(&\$map){"; //start filter $extendphpcode .= "\tpublic function _extend_filter(&\$map){"; //start filter $phpcode .= "\r\n"; // \$map['allnode']=\$this->getActionName(); $phpcode .= <<<COD \t\t\$fieldtype=\$_REQUEST['fieldtype']; \t\t\$relationmodelname=\$_REQUEST['bindaname']; \t\t//获取表单类型 \t\t\$type=getFieldBy(\$relationmodelname, "bindaname", "typeid", "mis_auto_bind"); \t\t \t\tif(\$fieldtype){ \t\t\t\$map[\$fieldtype]=\$_REQUEST[\$fieldtype]; \t\t\t\$this->assign("fieldtype",\$fieldtype); \t\t\t\$this->assign("fieldtypeval",\$_REQUEST[\$fieldtype]); \t\t}else{ \t\t\t//组从表单需加此条件过滤 \t\t\tif(\$type==1){ \t\t\t\tif(\$relationmodelname){ \t\t\t\t\t\$map['relationmodelname']=\$relationmodelname;\t \t\t\t\t} \t\t\t} \t\t} \t\t//强制加allnode 4.25 为区分复用表数据 \t\t \$map['allnode']=\$this->getActionName(); \t\tif(\$type==1){ \t\t\t// 为了兼容普通模式下的表单使用 \t\t\t\$bindid = \$_REQUEST['bindid']; \t\t\tif(\$bindid){ \t\t\t\t\$map['bindid']=\$bindid; \t\t\t\t\$this->assign("bindid",\$bindid); \t\t\t} \t\t} \t\tif (\$_SESSION["a"] != 1){ \t\t\t\$map['status']=array("gt",-1); \t\t} \t\t\$this->_extend_filter(\$map); COD; $phpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_before_index"; $extendphpcode .= "\r\n\t * @Description: todo(扩展前置index函数)"; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws "; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_before_index() {"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_before_edit"; $extendphpcode .= "\r\n\t * @Description: todo(扩展的前置编辑函数)"; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws "; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_before_edit(){"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_before_insert"; $extendphpcode .= "\r\n\t * @Description: todo(扩展的前置添加函数)"; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws "; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_before_insert(){"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_before_update"; $extendphpcode .= "\r\n\t * @Description: todo(扩展前置修改函数) "; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws"; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_before_update(){"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_after_edit"; $extendphpcode .= "\r\n\t * @Description: todo(扩展后置编辑函数)"; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws "; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_after_edit(&\$vo){"; // $extendphpcode .="\r\n\t\tif(\$_GET['viewtype']=='view'){"; // $extendphpcode .="\r\n\t\t\t\$this->assign( 'vo', \$vo );"; // $extendphpcode .="\r\n\t\t\t\$this->display('formview');"; // $extendphpcode .="\r\n\t\t\texit;"; // $extendphpcode .="\r\n\t\t}"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_after_list"; $extendphpcode .= "\r\n\t * @Description: todo(扩展前置List)"; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws "; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_after_list(){"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_after_insert"; $extendphpcode .= "\r\n\t * @Description: todo(扩展后置insert函数) "; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws"; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_after_insert(\$id){"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_before_add"; $extendphpcode .= "\r\n\t * @Description: todo(扩展前置add函数) "; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws"; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_before_add(&\$vo){"; $extendphpcode .= "\r\n\t\t\$this->getFormIndexLoad(\$vo);"; $extendphpcode .= "\r\n\t}"; $extendphpcode .= "\r\n\t/**"; $extendphpcode .= "\r\n\t * @Title: _extend_after_update"; $extendphpcode .= "\r\n\t * @Description: todo(扩展后置update函数) "; $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName']; $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $extendphpcode .= "\r\n\t * @throws"; $extendphpcode .= "\r\n\t*/"; $extendphpcode .= "\r\n\tfunction _extend_after_update(){"; $extendphpcode .= "\r\n\t}"; // beforindex $before_index = ''; $before_index .= "\r\n\t/**"; $before_index .= "\r\n\t * @Title: _before_index"; $before_index .= "\r\n\t * @Description: todo(前置index函数)"; $before_index .= "\r\n\t * @author " . $_SESSION['loginUserName']; $before_index .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $before_index .= "\r\n\t * @throws "; $before_index .= "\r\n\t*/"; $before_index .= "\r\n\tfunction _before_index() {"; // 默认生成 前置函数 $before_edit = ''; $before_edit .= "\r\n\t/**"; $before_edit .= "\r\n\t * @Title: _before_edit"; $before_edit .= "\r\n\t * @Description: todo(前置编辑函数)"; $before_edit .= "\r\n\t * @author " . $_SESSION['loginUserName']; $before_edit .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $before_edit .= "\r\n\t * @throws "; $before_edit .= "\r\n\t*/"; $before_edit .= "\r\n\tfunction _before_edit(){"; $before_insert = ''; $before_insert .= "\r\n\t/**"; $before_insert .= "\r\n\t * @Title: _before_insert"; $before_insert .= "\r\n\t * @Description: todo(前置添加函数)"; $before_insert .= "\r\n\t * @author " . $_SESSION['loginUserName']; $before_insert .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $before_insert .= "\r\n\t * @throws "; $before_insert .= "\r\n\t*/"; $before_insert .= "\r\n\tfunction _before_insert(){"; $allNodeconfig = $fieldData['all']; if (in_array("orderno", array_keys($allNodeconfig)) || $this->isaudit) { //判断是否带审批流,必须验证编码是否重复 $before_insert .= "\r\n\t\t\$this->checkifexistcodeororder('{$this->tableName}','orderno',\$this->getActionName());"; } $before_update = ''; $before_update .= "\r\n\t/**"; $before_update .= "\r\n\t * @Title: _before_update"; $before_update .= "\r\n\t * @Description: todo(前置修改函数) "; $before_update .= "\r\n\t * @author " . $_SESSION['loginUserName']; $before_update .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $before_update .= "\r\n\t * @throws"; $before_update .= "\r\n\t*/"; $before_update .= "\r\n\tfunction _before_update(){"; if (in_array("orderno", array_keys($allNodeconfig)) || $this->isaudit) { //判断是否带审批流,必须验证编码是否重复 $before_update .= "\r\n\t\t\$this->checkifexistcodeororder('{$this->tableName}','orderno',\$this->getActionName(),1);"; } // 重写父类编辑函数--为多表操作所做的修改 屈强@20141008 15:53 $edit = ''; $edit .= "\r\n\t/**"; $edit .= "\r\n\t * @Title: edit"; $edit .= "\r\n\t * @Description: todo(重写父类编辑函数)"; $edit .= "\r\n\t * @author " . $_SESSION['loginUserName']; $edit .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $edit .= "\r\n\t * @throws "; $edit .= "\r\n\t*/"; $edit .= "\r\n\tfunction edit(\$isdisplay=1){"; $edit .= "\r\n\t\t\$mainTab = '{$this->tableName}';"; $edit .= "\r\n\t\t//获取当前控制器名称"; $edit .= "\r\n\t\t\$name=\$this->getActionName();"; $edit .= "\r\n\t\t\$model = D(\"{$this->nodeName}View\");"; $edit .= "\r\n\t\t//获取当前主键"; $edit .= "\r\n\t\t\$map[\$mainTab.'.id']=\$_REQUEST['id'];"; $edit .= "\r\n\t\t\$vo = \$model->where(\$map)->find();"; $edit .= "\r\n\t\tif(!\$vo){"; $edit .= "\r\n\t\t\$this->getFormIndexLoad(\$vo);"; $edit .= "\r\n\t\t}"; $edit .= "\r\n\t\tif(method_exists ( \$this, '_filter' )) {"; $edit .= "\r\n\t\t\t\$this->_filter ( \$map );"; $edit .= "\r\n\t\t}"; $edit .= "\r\n\t\t//读取动态配制"; $edit .= "\r\n\t\t\$this->getSystemConfigDetail(\$name);"; $edit .= "\r\n\t\t//扩展工具栏操作"; $edit .= "\r\n\t\t\$scdmodel = D('SystemConfigDetail');"; $edit .= "\r\n\t\t// 上一条数据ID"; $edit .= "\r\n\t\t\$map['id'] = array(\"lt\",\$id);"; $edit .= "\r\n\t\t\$updataid = \$model->where(\$map)->order('id desc')->getField('id');"; $edit .= "\r\n\t\t\$this->assign(\"updataid\",\$updataid);"; $edit .= "\r\n\t\t// 下一条数据ID"; $edit .= "\r\n\t\t\$map['id'] = array(\"gt\",\$id);"; $edit .= "\r\n\t\t\$downdataid = \$model->where(\$map)->getField('id');"; $edit .= "\r\n\t\t\$this->assign(\"downdataid\",\$downdataid);"; $edit .= "\r\n\t\t//lookup带参数查询"; $edit .= "\r\n\t\t\$module=A(\$name);"; $edit .= "\r\n\t\tif (method_exists(\$module,\"_after_edit\")) {"; $edit .= "\r\n\t\t\tcall_user_func(array(\$module,\"_after_edit\"),\$vo);"; $edit .= "\r\n\t\t}"; $edit .= "\r\n\t\t\$this->assign( 'vo', \$vo );"; $edit .= "\r\n\t\tif(\$isdisplay)"; $edit .= "\r\n\t\t\$this->display ();"; $edit .= "\r\n\t}"; ////////////////////////////////////////////////////////////////// /* * 不要重写父类中的edit函数 */ $edit = ''; ///////////////////////////////////////////////////////////////////// // 默认生成后置函数 $after_edit = ''; $after_list = ''; $after_insert = ''; $before_add = ''; $after_update = ''; // 删除子表数据 $delChildData = ''; $is_create_del_child = false; $is_create_opraete_child = false; $is_create_modify_child = false; $is_create_insert_child = false; //控制地址组件修改代码生成 $isArea = false; // 实例化MODE $model_code = ''; $is_include_model = false; $after_edit .= "\r\n\t/**"; $after_edit .= "\r\n\t * @Title: _after_edit"; $after_edit .= "\r\n\t * @Description: todo(后置编辑函数)"; $after_edit .= "\r\n\t * @author " . $_SESSION['loginUserName']; $after_edit .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $after_edit .= "\r\n\t * @throws "; $after_edit .= "\r\n\t*/"; $after_edit .= "\r\n\tfunction _after_edit(\$vo){"; $after_list .= "\r\n\t/**"; $after_list .= "\r\n\t * @Title: _after_list"; $after_list .= "\r\n\t * @Description: todo(前置List)"; $after_list .= "\r\n\t * @author " . $_SESSION['loginUserName']; $after_list .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $after_list .= "\r\n\t * @throws "; $after_list .= "\r\n\t*/"; $after_list .= "\r\n\tfunction _after_list(){"; $after_insert .= "\r\n\t/**"; $after_insert .= "\r\n\t * @Title: _after_insert"; $after_insert .= "\r\n\t * @Description: todo(后置insert函数) "; $after_insert .= "\r\n\t * @author " . $_SESSION['loginUserName']; $after_insert .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $after_insert .= "\r\n\t * @throws"; $after_insert .= "\r\n\t*/"; $after_insert .= "\r\n\tfunction _after_insert(\$id){"; $before_add .= "\r\n\t/**"; $before_add .= "\r\n\t * @Title: _before_add"; $before_add .= "\r\n\t * @Description: todo(前置add函数) "; $before_add .= "\r\n\t * @author " . $_SESSION['loginUserName']; $before_add .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $before_add .= "\r\n\t * @throws"; $before_add .= "\r\n\t*/"; $before_add .= "\r\n\tfunction _before_add(){"; $after_update .= "\r\n\t/**"; $after_update .= "\r\n\t * @Title: _after_update"; $after_update .= "\r\n\t * @Description: todo(后置update函数) "; $after_update .= "\r\n\t * @author " . $_SESSION['loginUserName']; $after_update .= "\r\n\t * @date " . date('Y-m-d H:i:s'); $after_update .= "\r\n\t * @throws"; $after_update .= "\r\n\t*/"; $after_update .= "\r\n\tfunction _after_update(){"; /** * 步骤: * 1。先源数据 $filedData['visibility'] 中的项按表名['tablename']分组。 * 2。区分出主从表,主表的文件名用当前action名命名,从表以直接表名命名。 * 3。遍历分组后的数据,依次生成Model文件。 * * 表数组,基础为二维. * 0=>主表信息 * 1=>所有从表的信息 */ /* 处理子表错误,子表不做数据添加 会导致修改 视图查询数据若用户只勾取部分表字段 引起的查询不出数据。 * 处理方式为:取出当前action的所有子表 都生成 添加与修改都 做处理 **/ $curTabData = $this->getDataBaseConf(); $curTabData = $curTabData['cur']; foreach ($curTabData['datebase'] as $key => $val) { if (!$val['isprimay']) { $after_update .= "\r\n\t\t//添加子表数据处理--" . $_SESSION['loginUserName'] . '@' . date('Y-m-d H:i:s'); $after_update .= "\r\n\t\t\${$key}Mode = D('" . createRealModelName($key) . "');"; $after_update .= "\r\n\t\t\${$key}Data = \${$key}Mode->create();"; $after_update .= "\r\n\t\tunset(\${$key}Data['id']);"; $after_update .= "\r\n\t\tif(\${$key}Data){"; $after_update .= "\r\n\t\t\tif(\${$key}Mode->where('masid='.\${$key}Data['masid'])->find())"; $after_update .= "\r\n\t\t\t\t\${$key}Mode->where('masid='.\${$key}Data['masid'])->save(\${$key}Data);"; $after_update .= "\r\n\t\t\telse"; $after_update .= "\r\n\t\t\t\t\${$key}Mode->add(\${$key}Data);"; $after_update .= "\r\n\t\t}"; $after_insert .= "\r\n\t\t// 添加子表数据处理----" . $_SESSION['loginUserName'] . '@' . date('Y-m-d H:i:s'); $after_insert .= "\r\n\t\t\${$key}Mode = D('" . createRealModelName($key) . "');"; $after_insert .= "\r\n\t\t\${$key}Data = \${$key}Mode->create();"; $after_insert .= "\r\n\t\tunset(\${$key}Data['id']);"; $after_insert .= "\r\n\t\tif(\${$key}Data){"; $after_insert .= "\r\n\t\t\t\t\${$key}Data['masid']=\$id;"; $after_insert .= "\r\n\t\t\t\t\${$key}Mode->add(\${$key}Data);"; $after_insert .= "\r\n\t\t}"; } } // 审批流 if ($isaudit) { } foreach ($fieldData['visibility'] as $k => $v) { $property = $this->getProperty($v['catalog']); // 时间组件的自动获取当前系统时间功能 if ($v[$property['catalog']['name']] == 'date') { // if ($v[$property['defaulttimechar']['name']] && stringToTime($v[$property['defaulttimechar']['name']])) { $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=stringToTime('{$v[$property['defaulttimechar']['name']]}');"; } else { if ($v[$property['acquiretime']['name']]) { $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=time();"; } if ($v[$property['editacquiretime']['name']]) { $after_edit .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=time();"; } } } if (($v[$property['catalog']['name']] == 'lookup' || $v[$property['catalog']['name']] == 'text') && $v[$property['defaultval']['name']]) { //Lookup默认值 $defaultval = str_replace(array('"', ''', '<', '>'), array('"', "'", '<', '>'), $v[$property['defaultval']['name']]); if ($defaultval == "user_txsj") { $before_add .= "\r\n\t\t\$txsj=M('User')->where('id='.\$_SESSION[C('USER_AUTH_KEY')])->getField('txsj');"; $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=\$txsj;"; } else { $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=\$_SESSION[{$defaultval}];"; } } // 文本框组件的默认显示数据功能 by nbmxkj@20150408 1642 if ($v[$property['catalog']['name']] == 'text') { // 对现有字段 subimporttableobj(数据来源表) subimporttablefieldobj(显示字段) subimporttablefield2obj(值字段) // 做功用重定义 数据来源表 显示字段 是否在修改页面时也启用功能 $conditions = $v[$property['conditions']['name']]; $table = $v[$property['subimporttableobj']['name']]; $showField = $v[$property['subimporttablefieldobj']['name']]; $isEditShow = $v[$property['subimporttablefield2obj']['name']]; // throw new NullCreateOprateException($isEditShow); // 附加条件 $textAppendCondtionConfigStr = $v[$property['additionalconditions']['name']]; if ($table && $showField) { $conditionsOperated = "'"; if ($conditions) { $conditionsOperated .= $conditions; } $textAppendCondtionConfigArr = appendConditionConfigResolve($textAppendCondtionConfigStr); if ($conditions && $textAppendCondtionConfigStr) { $configResilvedArr = getAppendCondition($vo, $textAppendCondtionConfigArr); $conditionsOperated .= " and '.parameReplace(\"'\",\"'\",getAppendConditionExceptEmpty(\$vo," . arr2string($textAppendCondtionConfigArr) . "))"; } else { if (!$conditions && $textAppendCondtionConfigStr) { $conditionsOperated .= "'.parameReplace(\"'\",\"'\",getAppendConditionExceptEmpty(\$vo," . arr2string($textAppendCondtionConfigArr) . "))"; } else { $conditionsOperated .= "'"; } } $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=getFieldData('{$showField}','{$table}' , {$conditionsOperated});"; // 修改页面自动生成控制 if ($isEditShow) { $after_edit .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=getFieldData('{$showField}','{$table}' ,{$conditionsOperated});"; } } } if ($v[$property['catalog']['name']] == 'upload') { //存在上传组件 $after_edit .= "\r\n\t\t\$this->getAttachedRecordList(\$vo['id']);"; } if ($v[$property['catalog']['name']] == 'datatable') { //存在datatable类型组件 // 删除子表数据 if (!$is_create_del_child) { $delChildData .= $this->getDataTableAction(); $is_create_del_child = true; } $after_edit .= $this->dataTableEditCode($v, $property); if (!$is_create_modify_child) { $after_update .= "\r\n\t\t// 内嵌表数据添加处理"; $after_update .= $this->updateDatatableCode(); $is_create_modify_child = true; } if (!$is_create_insert_child) { $after_insert .= $this->insertDatatableCode(); $is_create_insert_child = true; } } if ($v[$property['catalog']['name']] == 'areainfo' && $isArea == false) { //存在areainfo类型组件 $after_edit .= $this->getAreaInfoCode(); $isArea = true; } } /**************************************************************************************************************************************/ /* 左侧树代码的处理 20141114 1957 */ /**************************************************************************************************************************************/ $misdynamicform = M('mis_dynamic_form_manage'); $formData = $misdynamicform->where("`actionname`='{$this->nodeName}'")->find(); $temp = explode('#', $formData['tpl']); if ($temp[0] == 'noaudittpl' && $temp[1] == 'ltrl') { $before_index .= "\r\n\t\t//查询绑定数据源"; $before_index .= "\r\n\t\t\$this->getDateSoure();"; } /**************************************************************************************************************************************/ /* 左侧树代码的处理 end */ /**************************************************************************************************************************************/ $before_index .= "\r\n\t\t\$this->_extend_before_index();"; $before_index .= "\r\n\t}"; $before_edit .= "\r\n\t\tif(\$_REQUEST['main'])"; $before_edit .= "\r\n\t\t\t\$this->assign(\"main\",\$_REQUEST['main']);"; $before_edit .= "\r\n\t\t\$this->_extend_before_edit();"; $before_edit .= "\r\n\t}"; $before_insert .= "\r\n\t\t\$this->_extend_before_insert();"; $before_insert .= "\r\n\t}"; $before_update .= "\r\n\t\t\$this->_extend_before_update();"; $before_update .= "\r\n\t}"; $after_edit .= "\r\n\t\t\$this->_extend_after_edit(\$vo);"; $after_edit .= "\r\n\t}"; $after_list .= "\r\n\t\t\$this->_extend_after_list();"; $after_list .= "\r\n\t}"; $after_insert .= "\r\n\t\t\$this->_extend_after_insert(\$id);"; $after_insert .= "\r\n\t}"; $before_add .= "\r\n\t\tif(\$_REQUEST['main'])"; $before_add .= "\r\n\t\t\t\$this->assign(\"main\",\$_REQUEST['main']);"; $before_add .= "\r\n\t\t\$this->_extend_before_add(\$vo);"; $before_add .= "\r\n\t}"; $after_update .= "\r\n\t\t\$this->_extend_after_update();"; $after_update .= "\r\n\t}"; //$phpcode.=$before_edit.$before_insert.$before_update.$after_edit.$after_list.$after_insert.$after_add.$after_update; $phpcode .= $edit . $before_index . $before_edit . $before_insert . $before_update . $after_edit . $after_insert . $before_add . $after_update . $delChildData; $phpcode .= "\r\n}\r\n?>"; $extendphpcode .= "\r\n}\r\n?>"; if (!is_dir(dirname($actionPath))) { mk_dir(dirname($actionPath), 0777); } if (false === file_put_contents($actionPath, $phpcode)) { $this->error("Action文件生成失败!"); } if ($isinitExtendAction) { if (false === file_put_contents($actionExtendPath, $extendphpcode)) { $this->error("扩展Action文件生成失败!"); } } else { if (false == file_exists($actionExtendPath)) { if (false === file_put_contents($actionExtendPath, $extendphpcode)) { $this->error("扩展Action文件生成失败!"); } } else { // 扩展文件已存在时的内部代码指定位置替换修改。 // by nbmxkj@20150605 1711 // 获取现有代码内容 $actionExtendContent = file_get_contents($actionExtendPath); //var_dump($actionExtendContent); // 正则匹配关键字 $baseExtendClass = 'CommonAction'; if ($this->isaudit) { $baseExtendClass = 'CommonAuditAction'; } // 替换基类 $clearUpContent = preg_replace_callback('/(extends)(.*?)(\\{)+/s', function ($vo) use($baseExtendClass) { return $vo[1] . ' ' . $baseExtendClass . ' ' . $vo[3]; }, $actionExtendContent); //var_dump($clearUpContent); /* 替换其中的特殊代码问题 获取该文件的创建间 如果创建时间大于 2015-04-28 00:00:01 后的代码文件不进行特殊代码替换生成 */ // 创建时间 $createTime = filectime($actionExtendPath); // 目标比较时间 $orderTime = strtotime('2015-04-28 00:00:01'); if (false !== $createTime) { //&& $createTime < $orderTime ){ // 为 _extend_before_add(扩展前置添加函数) 增加参数,及内容代码调用处理 /* function _extend_before_add(){ $this->getFormIndexLoad(); } */ $extendBeforeAdd = '&$vo'; $clearUpContent = preg_replace_callback('/(_extend_before_add\\()(.*?)(\\))+/s', function ($vo) use($extendBeforeAdd) { return $vo[1] . $extendBeforeAdd . $vo[3]; }, $clearUpContent); $outerFuncParam = '$vo'; $clearUpContent = preg_replace_callback('/(getFormIndexLoad\\()(.*?)(\\))+/s', function ($vo) use($outerFuncParam) { return $vo[1] . $outerFuncParam . $vo[3]; }, $clearUpContent); } file_put_contents($actionExtendPath, $clearUpContent); } } //return $phpcode; }