Files
xinhu/webmain/main/flow/flowAction.php
2024-10-18 15:27:40 +08:00

1648 lines
50 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
class flowClassAction extends Action
{
private $modeid,$moders,$isflow;
public function loaddataAjax()
{
$id = (int)$this->get('id');
$data = m('flow_set')->getone($id);
$arr = array(
'data' => $data
);
echo json_encode($arr);
}
public function modeafter($table, $rows)
{
return array(
'qian' => PREFIX
);
}
public function modebefore($table)
{
$where = '';
$key = $this->post('key');
if(!isempt($key)){
$where = "and (`type`='$key' or `name` like '%$key%' or `table` like '$key%' or `num` like '$key%' or `sericnum` like '$key%')";
}
return $where;
}
public function getcompanydataAjax()
{
$rows = array();
$msg = '';
if(!getconfig('platdwnum')){
$msg = '当前不是SAAS模式不需要操作';
}else{
if(!COMPANYNUM){
$rows = m('company')->getall('`iscreate`=1','id,name');
if(!$rows)$msg='没有创建过任何单位';
}else{
$msg = '请在管理模式下操作';
}
}
return returnsuccess($rows, $msg);
}
public function flowwheresave_before($table,$das)
{
$str = m('where')->checkwhere($das['setid'], $das['wheresstr']);
if($str)return $str;
}
public function flowmenusave_before($table,$das)
{
$str = m('where')->checkwhere($das['setid'], $das['wherestr']);
if($str)return $str;
}
private function getwherelist($setid)
{
return m('flow_where')->getall('setid='.$setid.'','id,name','sort');
}
public function loaddatacourseAjax()
{
$id = (int)$this->get('id');
$setid = (int)$this->get('setid');
$data = m('flow_course')->getone($id);
$arr = array(
'data' => $data,
'wherelist' => $this->getwherelist($setid),
'statusstr' => m('flow_set')->getmou('statusstr', $setid)
);
echo json_encode($arr);
}
public function loaddatawhereAjax()
{
$id = (int)$this->get('id');
$data = m('flow_where')->getone($id);
$arr = array(
'data' => $data,
);
echo json_encode($arr);
}
public function flowsetsavebefore($table, $cans)
{
$tab = $cans['table'];
$tabs= trim($cans['tables']);
$names= trim($cans['names']);
$name= $this->rock->xssrepstr($cans['name']);
$num = strtolower($cans['num']);
$cobj= c('check');
if(!$cobj->iszgen($tab))return '表名格式不对';
$bobg = preg_replace("/[a-zA-Z0-9_]/",'', $tab);
if($bobg)return '表名禁用:'.$bobg.'';
if($cobj->isnumber($num))return '编号不能为数字';
if(strlen($num)<4)return '编号至少要4位';
if($cobj->isincn($num))return '编号不能包含中文';
if(contain($num,'-'))return '编号不能有-';
$bobg = preg_replace("/[a-zA-Z0-9_]/",'', $num);
if($bobg)return '模块编号禁用:'.$bobg.'';
if($cans['isflow']>0 && isempt($cans['sericnum'])) return '有流程必须有写编号规则,请参考其他模块填写';
$rows['num']= $this->rock->xssrepstr($num);
$rows['name']= $name;
if(!isempt($tabs)){
if($cobj->isincn($tabs))return '多行子表名不能包含中文';
$bobg = preg_replace("/[a-zA-Z0-9_,]/",'', $tabs);
if($bobg)return '子表名禁用:'.$bobg.'';
$tabsa = explode(',', $tabs);
$namea = explode(',', $names);
foreach($tabsa as $k1=>$tabsas){
if(isempt($tabsas))return '多行子表名('.$tabs.')不规范';
if(isempt(arrvalue($namea, $k1)))return '第'.($k1+1).'个多行子表名称必须填写';
}
}
$rows['tables']= $tabs;
if($cans['where'])$rows['where'] = htmlspecialchars_decode($cans['where']);
return array(
'rows' => $rows
);
}
private function setsubtsta($tabs, $alltabls, $tab, $slxbo, $ssm)
{
if(isempt($tabs))return;
if(!in_array(''.PREFIX.''.$tabs.'', $alltabls)){
$sql = "CREATE TABLE `[Q]".$tabs."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mid` int(11) DEFAULT '0' COMMENT '对应主表".$tab.".id',
`sort` int(11) DEFAULT '0' COMMENT '排序号',
`comid` smallint(6) DEFAULT '0' COMMENT '对应单位id',
PRIMARY KEY (`id`),KEY `mid` (`mid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;";
$bo = $this->db->query($sql);
}else{
$fields = $this->db->getallfields(''.PREFIX.''.$tabs.'');
$str = '';
if(!in_array('mid', $fields))$str.=",add `mid` int(11) DEFAULT '0' COMMENT '对应主表".$tab.".id'";
if(!in_array('sort', $fields))$str.=",add `sort` int(11) DEFAULT '0' COMMENT '排序号'";
if(!in_array('comid', $fields))$str.=",add `comid` smallint(6) DEFAULT '0' COMMENT '对应单位id'";
if($slxbo && !in_array('sslx', $fields)){
$ssma = explode(',', $ssm);
$ss1 = '';
foreach($ssma as $k=>$ssmas)$ss1.=','.$k.''.$ssmas.'';
if($ss1!='')$ss1 = substr($ss1, 1);
$str.=",add `sslx` tinyint(1) DEFAULT '0' COMMENT '".$ss1."'";
}
if($str!=''){
$sql = 'alter table `'.PREFIX.''.$tabs.'` '.substr($str,1).'';
$this->db->query($sql);
}
}
}
public function flowsetsaveafter($table, $cans)
{
$isflow = $cans['isflow'];
$name = $cans['name'];
$tab = $cans['table'];
$tabs = $cans['tables'];
$alltabls = array();
//创建保存多行子表
if(!isempt($tabs)){
$alltabls = $this->db->getalltable();
$tabsa = explode(',', $tabs);
$addsts = array();
foreach($tabsa as $tabsas){
$this->setsubtsta($tabsas, $alltabls, $tab, in_array($tabsas, $addsts), $cans['names']);
$alltabls[] = ''.PREFIX.''.$tabsas.'';
$addsts[] = $tabsas;
}
}
$noarray = array('menu','flow_set','flow_element','flow_menu','flow_bill','flow_extent','flow_where');
if(isempt($tab))return;
if(in_array($tab, $noarray))return;
if(!$alltabls)$alltabls = $this->db->getalltable();
if($isflow==0){
if(!in_array(''.PREFIX.''.$tab.'', $alltabls)){
$sql = "CREATE TABLE `[Q]".$tab."` (`id` int(11) NOT NULL AUTO_INCREMENT,`comid` smallint(6) DEFAULT '0' COMMENT '对应单位id',`uid` int(11) DEFAULT '0',`optid` int(11) DEFAULT '0' COMMENT '操作人id',`optname` varchar(20) DEFAULT NULL COMMENT '操作人',`optdt` datetime DEFAULT NULL COMMENT '操作时间',PRIMARY KEY (`id`))ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='$name';";
$bo = $this->db->query($sql);
}else{
$fields = $this->db->getallfields(''.PREFIX.''.$tab.'');
$str = '';
if(!in_array('comid', $fields) && !in_array('companyid', $fields))$str.=",add `comid` smallint(6) DEFAULT '0' COMMENT '对应单位id'";
if($str!=''){
$sql = 'alter table `'.PREFIX.''.$tab.'` '.substr($str,1).'';
$this->db->query($sql);
}
}
return;
}
if(!in_array(''.PREFIX.''.$tab.'', $alltabls)){
$sql = "CREATE TABLE `[Q]".$tab."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) DEFAULT '0',
`optdt` datetime DEFAULT NULL COMMENT '操作时间',
`optid` int(11) DEFAULT '0',
`optname` varchar(20) DEFAULT NULL COMMENT '操作人',
`applydt` date DEFAULT NULL COMMENT '申请日期',
`explain` varchar(500) DEFAULT NULL COMMENT '说明',
`status` tinyint(1) DEFAULT '1' COMMENT '状态',
`isturn` tinyint(1) DEFAULT '1' COMMENT '是否提交',
`comid` smallint(6) DEFAULT '0' COMMENT '对应单位id',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='$name';";
$bo = $this->db->query($sql);
}else{
$fields = $this->db->getallfields(''.PREFIX.''.$tab.'');
$str = '';
if(!in_array('uid', $fields))$str.=",add `uid` int(11) DEFAULT '0'";
if(!in_array('optdt', $fields))$str.=",add `optdt` datetime DEFAULT NULL COMMENT '操作时间'";
if(!in_array('optid', $fields))$str.=",add `optid` int(11) DEFAULT '0'";
if(!in_array('optname', $fields))$str.=",add `optname` varchar(20) DEFAULT NULL COMMENT '操作人'";
if(!in_array('applydt', $fields))$str.=",add `applydt` date DEFAULT NULL COMMENT '申请日期'";
if(!in_array('explain', $fields))$str.=",add `explain` varchar(500) DEFAULT NULL COMMENT '说明'";
if(!in_array('status', $fields))$str.=",add `status` tinyint(1) DEFAULT '1' COMMENT '状态'";
if(!in_array('isturn', $fields))$str.=",add `isturn` tinyint(1) DEFAULT '1' COMMENT '是否提交'";
if(!in_array('comid', $fields) && !in_array('companyid', $fields))$str.=",add `comid` smallint(6) DEFAULT '0' COMMENT '对应单位id'";
if($str!=''){
$sql = 'alter table `'.PREFIX.''.$tab.'` '.substr($str,1).'';
$this->db->query($sql);
}
}
}
public function elementafter($table, $rows)
{
$moders = m('flow_set')->getone($this->mid);
$farrs = array();
if($this->mid>0){
$tass = $moders['table'];
$tasss = $moders['tables'];
$farr = $this->db->gettablefields('[Q]'.$tass.'');
$farrs[]= array('id'=>'','name'=>'————↓以下主表('.$tass.')的字段————');
foreach($farr as $k=>$rs){
$farrs[]= array('id'=>$rs['name'],'name'=>'['.$rs['name'].']'.$rs['explain'].'');
}
if(!isempt($tasss)){
$tasssa = explode(',', $tasss);
foreach($tasssa as $k=>$tasss){
$farr = $this->db->gettablefields('[Q]'.$tasss.'');
$farrs[]= array('id'=>'','name'=>'————↓以下第'.($k+1).'个多行子表('.$tasss.')的字段————');
foreach($farr as $k=>$rs){
$farrs[]= array('id'=>$rs['name'],'name'=>'['.$rs['name'].']'.$rs['explain'].'');
}
}
}
}
return array(
'flowarr'=>$this->getmodearr(),
'moders'=>$moders,
'fieldsarr' => $farrs,
'fieldstypearr'=> $this->option->getdata('flowinputtype')
);
}
public $mid;
public function elementbefore($table)
{
$mid = (int)$this->post('mid');
$this->mid = $mid;
return array(
'where' => 'and `mid`='.$mid.'',
'order' => 'iszb,sort,id'
);
}
//模块多模版
public function modetpl_before($table)
{
$mid = (int)$this->post('mid');
$this->mid = $mid;
return array(
'where' => 'and `setid`='.$mid.'',
'order' => 'sort,id'
);
}
public function modetpl_after($table, $rows)
{
return array(
'flowarr'=>$this->getmodearr(' and `istpl`=1')
);
}
public function modetpledit_before($table)
{
$mid = (int)$this->post('mid');
$this->mid = $mid;
return array(
'where' => 'and `mid`='.$mid.' and `iszb`=0',
'order' => 'sort,id'
);
}
public function modetpledit_after($table, $rows)
{
$sid = (int)$this->post('sid');
$data = false;
$fieldsluru = $fieldsbitian = '';
if($sid>0){
$data = m('flow_modetpl')->getone($sid);
$fieldsluru = $data['fieldsluru'];
$fieldsbitian = $data['fieldsbitian'];
foreach($rows as $k=>$rs){
if(!isempt($fieldsluru)){
$islu = 0;
if(contain(','.$fieldsluru.',',','.$rs['fields'].','))$islu=1;
$rows[$k]['islu'] = $islu;
}
if(!isempt($fieldsbitian)){
$isbt = 0;
if(contain(','.$fieldsbitian.',',','.$rs['fields'].','))$isbt=1;
$rows[$k]['isbt'] = $isbt;
}
}
}
return array(
'data' => $data,
'rows' => $rows,
);
}
public function modetpl_savefieldsbefore($table, $cans)
{
$tplnum = $cans['tplnum'];
if(c('check')->isincn($tplnum))return '编号不能包含中文';
$id = (int)$this->post('id');
if(m($table)->rows("`tplnum`='$tplnum' and `id`<>'$id'")>0)return '编号已经存在';
}
public function modetpl_savefieldsafter($table, $cans)
{
$mid = $cans['setid'];
$tab = m('mode')->getmou('`table`',$mid);
if(!isempt($tab)){
$fields = $this->db->getallfields(''.PREFIX.''.$tab.'');
$str = '';
if(!in_array('mtplid', $fields))$str.=",add `mtplid` int(11) DEFAULT '0' COMMENT '对应多模版flow_modetpl.id'";
if($str!=''){
$sql = 'alter table `'.PREFIX.''.$tab.'` '.substr($str,1).'';
$this->db->query($sql);
}
}
}
//单据操作菜单
public function flowmenubefore($table)
{
$mid = (int)$this->post('mid');
$this->mid = $mid;
return 'and `setid`='.$mid.'';
}
public function flowmenuafter($table, $rows)
{
return array(
'flowarr'=>$this->getmodearr()
);
}
//条件where
public function flowwhereafter($table, $rows)
{
return array(
'flowarr'=> $this->getmodearr()
);
}
public function flowwherebefore($table)
{
return array(
'table' => '`[Q]'.$table.'` a left join `[Q]flow_set` b on a.setid=b.id',
'fields'=> 'a.*,b.num as modenum,b.name as modename'
);
}
//单据通知设置
public function flowtodobefore($table)
{
$mid = (int)$this->post('mid');
$this->mid = $mid;
$where = '';
if($mid>0)$where = 'and `setid`='.$mid.'';
return array(
'where' => $where,
'table' => '`[Q]'.$table.'` a left join `[Q]flow_set` b on a.setid=b.id',
'fields'=> 'a.*,b.name as modename'
);
}
public function flowtodoafter($table, $rows)
{
$fielslist = m('flow_element')->getrows("mid='$this->mid' and iszb=0 and islu=1",'fields,name','sort');
foreach($fielslist as &$v){
$v['name'] = ''.$v['fields'].'.'.$v['name'].'';
}
$courselist = m('flow_course')->getrows("setid='$this->mid' and `status`=1",'id,name','pid,sort');
foreach($courselist as &$v1){
$v1['name'] = ''.$v1['id'].'.'.$v1['name'].'';
}
$dbss = m('remind');
foreach($rows as $k=>$rs){
$whereid = '';
if($rs['whereid']>'0')$whereid = $this->db->getmou('[Q]flow_where','name', $rs['whereid']);
$rows[$k]['whereidstr'] = $whereid;
if($rs['botask']=='1'){
$rows[$k]['remindrs'] = $dbss->getremindrs('flow_todo', $rs['id']);
}
}
return array(
'flowarr' => $this->getmodearr(),
'wherelist' => $this->getwherelist($this->mid),
'fielslist' => $fielslist,
'courselist' => $courselist,
'rows' => $rows
);
}
private function getmodearr($whe='')
{
return m('mode')->getmodearr($whe);
}
public function inputzsAction()
{
$setid = $this->get('setid');
$atype = (int)$this->get('atype','0');
$rs = m('flow_set')->getone("`id`='$setid'");
if(!$rs)exit('sorry!');
$this->smartydata['rs'] = $rs;
$atypea = array('PC端','手机端','PC端打印');
$this->title = $rs['name'].'_'.$atypea[$atype].'展示页面设置';
$fleftarr = m('flow_element')->getrows("`mid`='$setid' and `iszb`=0",'`fields`,`name`','`iszb`,`sort`');
$modenum = $rs['num'];
$fleft[]= array('base_name', '申请人',0);
$fleft[]= array('base_deptname', '申请部门',0);
$fleft[]= array('base_sericnum', '单号',0);
$fleft[] = array('file_content', '相关文件',0);
$iszb = 0;
foreach($fleftarr as $k=>$brs){
$fleft[]= array($brs['fields'], $brs['name'], $iszb);
}
if(!isempt($rs['tables'])){
$tablea = explode(',', $rs['tables']);
$namesa = explode(',', $rs['names']);
$fleft[]= array('', '<font color=#ff6600>↓多行子表</font>', 0);
foreach($tablea as $k=>$rs1){
$fleft[]= array('subdata'.$k.'', $namesa[$k], 0);
}
}
if($rs['isflow']>0){
$fleft[]= array('', '<font color=#ff6600>↓流程审核步骤</font>', 0);
$rows = m('flow_course')->getrows('setid='.$setid.' and `status`=1','id,name','pid,sort');
foreach($rows as $k=>$rs){
$fleft[]= array('course'.$rs['id'].'_all', ''.$rs['name'].'处理意见', 0);
$fleft[]= array('course'.$rs['id'].'_name', ''.$rs['name'].'处理人', 0);
$fleft[]= array('course'.$rs['id'].'_zt', ''.$rs['name'].'处理状态', 0);
$fleft[]= array('course'.$rs['id'].'_dt', ''.$rs['name'].'处理时间', 0);
$fleft[]= array('course'.$rs['id'].'_sm', ''.$rs['name'].'处理说明', 0);
}
}
$this->smartydata['fleft'] = $fleft;
$this->smartydata['atype'] = $atype;
$path = ''.P.'/flow/page/view_'.$modenum.'_'.$atype.'.html';
$bianhao = $modenum;
if(COMPANYNUM){
$path1 = ''.P.'/flow/page/view_'.$modenum.'_'.COMPANYNUM.'_'.$atype.'.html';
if(file_exists($path1)){
$path = $path1;
$bianhao.='_'.COMPANYNUM.'';
}
}
$content = '';
if(file_exists($path)){
$content = file_get_contents($path);
}
$this->smartydata['content'] = $content;
$this->smartydata['bianhao'] = $bianhao;
}
public $setinputid = 0;
public function inputAction()
{
$setid = (int)$this->get('setid','0');
if($this->setinputid>0)$setid = $this->setinputid;
$atype = $this->get('atype');
$rs = m('flow_set')->getone("`id`='$setid'");
if(!$rs)exit('sorry!');
$rs['zibiaoshu'] = count(explode(',', (string)$rs['tables']));
$this->smartydata['rs'] = $rs;
$this->title = $rs['name'].'_录入页面设置';
$fleftarr = m('flow_element')->getrows("`mid`='$setid'",'*','`iszb`,`sort`');
$modenum = $rs['num'];
$fleft[]= array('base_name', '申请人',0);
$fleft[]= array('base_deptname', '申请部门',0);
$fleft[]= array('base_sericnum', '单号',0);
$fleft[] = array('file_content', '相关文件',0);
$iszb = 0;
foreach($fleftarr as $k=>$brs){
$bt='';
if($brs['isbt']==1)$bt='*';
$iszbs = $brs['iszb'];
if($iszbs>0&&$iszb != $iszbs){
$fleft[]= array('', '<font color=#ff6600>—第'.$iszbs.'个多行子表—</font>', $iszbs);
$fleft[]= array('xuhao', '序号', $iszbs);
}
$iszb = $iszbs;
$fleft[]= array($brs['fields'], $bt.$brs['name'], $iszb);
}
$this->smartydata['fleft'] = $fleft;
$bianhao = $modenum;
$path = ''.P.'/flow/page/input_'.$modenum.'.html';
if(COMPANYNUM){
$path1 = ''.P.'/flow/page/input_'.$modenum.'_'.COMPANYNUM.'.html';
if(file_exists($path1)){
$bianhao.='_'.COMPANYNUM.'';
$path = $path1;
}
}
$content = '';
if(file_exists($path)){
$content = file_get_contents($path);
}
$this->smartydata['bianhao'] = $bianhao;
$this->smartydata['content'] = $content;
$apaths = ''.P.'/flow/input/inputjs/mode_'.$modenum.'.js';
if(!file_exists($apaths)){
$stra='//流程模块【'.$modenum.'.'.$rs['name'].'】下录入页面自定义js页面,初始函数
function initbodys(){
}';
$this->rock->createtxt($apaths, $stra);
}
$apaths = ''.P.'/flow/input/mode_'.$modenum.'Action.php';
$apath = ''.ROOT_PATH.'/'.$apaths.'';
if(!file_exists($apath)){
$stra = '<?php
/**
* 此文件是流程模块【'.$modenum.'.'.$rs['name'].'】对应控制器接口文件。
*/
class mode_'.$modenum.'ClassAction extends inputAction{
/**
* 重写函数:保存前处理,主要用于判断是否可以保存
* $table String 对应表名
* $arr Array 表单参数
* $id Int 对应表上记录Id 0添加时大于0修改时
* $addbo Boolean 是否添加时
* return array(\'msg\'=>\'错误提示内容\',\'rows\'=> array()) 可返回空字符串,或者数组 rows 是可同时保存到数据库上数组
*/
protected function savebefore($table, $arr, $id, $addbo){
}
/**
* 重写函数:保存后处理,主要保存其他表数据
* $table String 对应表名
* $arr Array 表单参数
* $id Int 对应表上记录Id
* $addbo Boolean 是否添加时
*/
protected function saveafter($table, $arr, $id, $addbo){
}
}
';
$this->rock->createtxt($apaths, $stra);
}
if(!file_exists($apath))echo '<div style="background:red;color:white;padding:10px">无法创建文件:'.$apaths.',会导致录入数据无法保存,请手动创建!代码内容如下:</div><div style="background:#caeccb">&lt;?php<br>class mode_'.$modenum.'ClassAction extends inputAction<br>{<br>}</div>';
}
private function geuolvstr($str)
{
$str = str_replace(array('<?php','$_POST','exec','system') ,'', $str);
return $str;
}
private function geuolvstra($str)
{
$str = str_replace(array('../','.','/') ,'', $str);
return $str;
}
public function pagesaveAjax()
{
$content = $this->geuolvstr($this->post('content'));
$num = $this->geuolvstra($this->post('num'));
if(m('flow_set')->rows("`num`='$num'")==0)return;
$path = ''.P.'/flow/page/input_'.$num.'.html';
if(COMPANYNUM)$path = ''.P.'/flow/page/input_'.$num.'_'.COMPANYNUM.'.html';
$bo = $this->rock->createtxt($path, $content);
if(!$bo){
echo '无法写入文件:'.$path.'';
}else{
echo 'success';
}
}
public function viewsaveAjax()
{
$content = $this->geuolvstr($this->post('content'));
$num = $this->geuolvstra($this->post('num'));
if(m('flow_set')->rows("`num`='$num'")==0)return;
$atype = (int)$this->post('atype','0');
$path = ''.P.'/flow/page/view_'.$num.'_'.$atype.'.html';
if(COMPANYNUM){
$path = ''.P.'/flow/page/view_'.$num.'_'.COMPANYNUM.'_'.$atype.'.html';
}
if(isempt($content)){
@unlink($path);
return 'success';
}
$bo = $this->rock->createtxt($path, $content);
if(!$bo){
echo '无法写入文件:'.$path.'';
}else{
echo 'success';
}
}
public function getinputAjax()
{
$num = $this->post('num');
$path = ''.P.'/flow/page/input_'.$num.'.html';
$cont = '';
if(file_exists($path)){
$cont = file_get_contents($path);
$cont = str_replace('*','', $cont);
}
echo $cont;
}
public function getsubtableAjax()
{
$iszb = (int)$this->post('iszb');
$hang = (int)$this->post('hang');
$modeid = (int)$this->post('modeid');
$str = m('input')->getsubtable($modeid, $iszb, $hang);
if($str=='')$this->backmsg('没有设置第'.$iszb.'个多行子表');
$this->backmsg('','ok', $str);
}
//一键布局录入页
public $yinruonearr = false;
public function yinruoneAjax()
{
if($this->yinruonearr){
$modeid = $this->yinruonearr['modeid'];
$xgwj = (int)arrvalue($this->yinruonearr, 'xgwj');
$base = (int)arrvalue($this->yinruonearr, 'base');
}else{
$modeid = (int)$this->post('modeid');
$xgwj = (int)$this->post('xgwj');
$base = (int)$this->post('base');
}
$mrs = m('mode')->getone($modeid);
$rowsa = m('flow_element')->getall('mid='.$modeid.' and `iszb`=0 and `islu`=1','*','sort,id');
$yczd = '';
$rows = array();
$fzuar = array();
foreach($rowsa as $k1=>$rs1){
if($rs1['fieldstype']=='hidden' || $rs1['fieldstype']=='fixed'){
$yczd.='{'.$rs1['fields'].'}';
}else{
$rows[] = $rs1;
$ftype = arrvalue($rs1, 'ftype');
if(isempt($ftype))$ftype = 'defv';
if(!isset($fzuar[$ftype]))$fzuar[$ftype] = array();
$fzuar[$ftype][]= $rs1;
}
}
$xichu = 0;
$s = '';
foreach($fzuar as $fl=>$fstra){
$xichu++;
if($xichu>1){
$s.='</tbody></table>';
}
if($fl!='defv'){
$s.='<br><div><b>'.$fl.'</b></div>';
}
$str1 = $this->yubustsin($fstra, $yczd);
$s.=$str1;
$yczd = '';
}
$tables = $mrs['tables'];
if(!isempt($tables)){
$tablesa = explode(',', $tables);
$tablesn = explode(',', $mrs['names']);
foreach($tablesa as $k=>$tab){
$str = m('input')->getsubtable($modeid, $k+1, 1);
$s.='<tr ><td class="ys2" style="background-color:#CCCCCC;" colspan="4"><strong>'.arrvalue($tablesn, $k).'</strong></td></tr>';
$s.='<tr><td class="ys0" colspan="4">'.$str.'</td></tr>';
}
}
if($xgwj==1)$s.='<td height="34" align="right" class="ys1">^file_content^</td><td colspan="3" class="ys2"> {file_content}</td>';
if($base==1)$s.='<tr><td height="34" align="right" class="ys1">^base_name^</td><td class="ys2" >{base_name}</td><td align="right" class="ys1" >^base_deptname^</td><td class="ys2" >{base_deptname}</td></tr>';
$s.='</tbody></table>';
return $s;
}
public function yubustsin($rows, $yczd)
{
$zhang = array('textarea','htmlediter','uploadfile','uploadimg','changedeptusercheck');
$s = '<table width="100%" border="0"><tbody><tr class="autoyijianview">';
$xuo = 0;
$zlen= count($rows)-1;
foreach($rows as $k=>$rs){
$xuo++;
$name = '^'.$rs['fields'].'^';
if($rs['isbt']=='1')$name='*'.$name.'';
if(in_array($rs['fieldstype'], $zhang) || contain($rs['attr'],'maxhang')){
if($xuo==2)$s.='<td height="34" align="right" class="ys1"></td><td class="ys2"></td></tr><tr>';
$s.='<td height="34" align="right" class="ys1">'.$name.'</td><td colspan="3" class="ys2">{'.$rs['fields'].'}'.$yczd.'</td>';
if($xuo==1)$xuo=2;
}else{
$s.='<td height="34" width="15%" align="right" class="ys1">'.$name.'</td><td width="35%" class="ys2">{'.$rs['fields'].'}'.$yczd.'</td>';
}
$yczd='';
if($xuo==2){
$s.='</tr>';
if($k<$zlen)$s.='<tr>';
$xuo=0;
}
if($xuo==1 && $k==$zlen){
$s.='<td height="34" align="right" class="ys1"></td><td class="ys2"></td></tr>';
}
}
return $s;
}
public function getmodearrAjax()
{
$arr = $this->getmodearr();
$this->backmsg('','ok', $arr);
}
public function viewshowbefore($table)
{
$this->modeid = (int)$this->post('modeid');
if($this->modeid==0){
return 'and 1=2';
}
$this->moders = m('flow_set')->getone($this->modeid);
$this->isflow = $this->moders['isflow'];
$table = $this->moders['table'];
$where = $this->moders['where'];
if(!isempt($where)){
$where = $this->rock->covexec($where);
$where = "and $where";
}
return array(
'table' => '[Q]'.$table,
'where' => $where
);
}
public function viewshowafter($table, $rows)
{
$arr = array();
if($rows){
$flow = m('flow')->initflow($this->moders['num']);
$mbil = m('flowbill');
foreach($rows as $k=>$rs){
$zt = '';
if(isset($rs['status']))$zt = $rs['status'];
$narr['id'] = $rs['id'];
$narr['ishui'] = ($zt=='5')?1:0;
$narr['optname'] = arrvalue($rs,'optname');
$narr['modenum'] = $this->moders['num'];
$narr['modename'] = $this->moders['name'];
$narr['table'] = $this->moders['table'];
$narr['optdt'] = arrvalue($rs,'optdt');
$nors = $flow->flowrsreplace($rs, 2);
$narr['summary'] = $this->rock->reparr($this->moders['summary'], $nors);
$otehsr = '';
if($flow->isflow>0){
$billrs = $flow->billmodel->getone("`table`='$flow->mtable' and `mid`='".$rs['id']."'");
$otehsr = arrvalue($billrs, 'nowcheckname');
$narr['udeptname'] = arrvalue($billrs, 'udeptname');
$narr['optname'] = arrvalue($billrs, 'uname');
}else{
$uid = arrvalue($rs,'uid');
if(!$uid)$uid = arrvalue($rs,'optid');
if($uid){
$urs = $flow->adminmodel->getXinxi($uid);
if($urs){
$narr['udeptname'] = $urs['deptname'];
$narr['optname'] = $urs['name'];
}
}
}
$narr['status'] = $flow->getstatus($rs,'',$otehsr,1);
$narr['chushu'] = $flow->flogmodel->rows("`table`='".$flow->mtable."' and `mid`='".$rs['id']."'");
$arr[] = $narr;
}
}
return array('rows'=>$arr);
}
public function viewlogshowbefore($table)
{
$where = "and `table`='".$this->post('num')."' and `mid`='".$this->post('mid')."'";
return array(
'where' => $where
);
}
//删除单据,用户=1不需要权限判断
public function delmodeshujuAjax()
{
$this->modeid = (int)$this->post('modeid');
$mid = (int)$this->post('mid');
$modenum = $this->post('modenum');
if($this->modeid>0){
$this->moders = m('flow_set')->getone($this->modeid);
if(!$this->moders)backmsg('sorry!');
$modenum = $this->moders['num'];
}
if(isempt($modenum))backmsg('操作有误');
$msg = m('flow')->deletebill($modenum, $mid, '', $this->adminid!=1);
if($msg=='ok')$msg='';
backmsg($msg);
}
//元素保存之前判断
public function elemensavefieldsbefore($table, $cans, $id)
{
$iszb = (int)$cans['iszb'];
$fields = $cans['fields'];
$type = $cans['fieldstype'];
$data = $cans['data'];
if(c('check')->isincn($fields))return '对应字段不能有汉字';
if(c('check')->isnumber($fields))return '对应字段不能是数字';
if($type=='selectdatafalse' || $type=='selectdatatrue'){
if(isempt($data))return '此类型数据源必须设置如写:'.$fields.'store';
if(contain(','.$data.',',',id,'))return '数据源不能包含,id';
}
$mid = $cans['mid'];
$this->mmoders = m('flow_set')->getone($mid);
$tablessa = explode(',', $this->mmoders['tables']);
if($iszb>0){
$tabsss = $this->rock->arrvalue($tablessa, $iszb-1);
if(isempt($tabsss))return '模块没有设置第'.$iszb.'个多行子表';
}
if(m($table)->rows("`mid`='$mid' and `iszb`='$iszb' and `fields`='$fields' and `id`<>'$id'")>0){
return '字段['.$fields.']已存在了';
}
}
//保存字段判断,自动创建字段
public function elemensavefields($table, $cans)
{
$fields = $cans['fields'];
$name = $cans['name'];
$mid = $cans['mid'];
$type = $cans['fieldstype'];
$lens = $cans['lens'];
$dev = $cans['dev'];
$data = $cans['data'];
$iszb = (int)$cans['iszb'];
$this->xiaoshu = (int)arrvalue($cans,'xiaoshu','-1');
$mrs = $this->mmoders;
$tables = $mrs['table'];
if($iszb>0){
$tables = '';
$tablessa = explode(',', $mrs['tables']);
if(isset($tablessa[$iszb-1]))$tables = $tablessa[$iszb-1];
}
$fiesss = substr($fields,0,5);
if($fiesss == 'base_' || $fiesss == 'temp_')return;
if(!isempt($tables) && $cans['islu']==1){
$_fieldsa = $this->db->gettablefields('[Q]'.$tables.'');$allfields = array();
foreach($_fieldsa as $k2=>$rs2)$allfields[$rs2['name']] = $rs2;
$this->createfields($allfields, $tables, $fields, $type, $lens, $dev, $name);
if(substr($type,0,6)=='change' && !isempt($data)){
if($type=='changeuser' || $type=='changedept'){
$type='number';
}
$this->createfields($allfields, $tables, $data, $type, $lens, '', $name.'的ID');
}
}
}
//创建字段
private function createfields($allfields, $tables, $fields, $type, $lens, $dev, $name)
{
if(isempt($lens))$lens='0';
$lens = (int)$lens;
if(!isset($allfields[$fields])){
$str = "ALTER TABLE `[Q]".$tables."` ADD `$fields` ";
if($type=='date' || $type=='datetime' || $type=='time'){
$str .= ' '.$type.'';
}else if($type=='number'){
if($this->xiaoshu>0){
if($lens<6)$lens = 6;
$str .= ' decimal('.$lens.', '.$this->xiaoshu.')';
}else if($lens>6){
$str .= ' int('.$lens.')';
}else{
$str .= ' smallint(6)';
}
}else if($type=='checkbox'){
$str .= ' tinyint(1)';
}else if($type=='textarea'){
$str .= ' varchar(2000)';
}else{
if($lens=='0')$lens='50';
$str .= ' varchar('.$lens.')';
}
if(!isempt($dev) && !contain($dev,'{'))$str.= " DEFAULT '$dev'";
$str.= " COMMENT '$name'";
$this->db->query($str);
}else{
$farr = $allfields[$fields];
$ustr = '';
$len = (int)$farr['lens'];
$xslen1 = (int)arrvalue($farr,'xslen1','0');
$xslen2 = (int)arrvalue($farr,'xslen2','0');
if($farr['type']=='varchar'){
if($lens>$len)$ustr='varchar('.$lens.')';
}
if($farr['type']=='smallint' || $farr['type']=='int'){
if($lens>6 && $lens>$len)$ustr='int('.$lens.')';
}
if($farr['type']=='decimal'){
if($lens>$xslen1)$ustr= 'decimal('.$lens.', '.$xslen2.')';
}
if($type=='date' || $type=='datetime'){
if($farr['type']!=$type){
$ustr= ''.$type.'';
}
}
if($type=='number'){
if($lens<6)$lens = $xslen1;
if($lens<6)$lens = 6;
if($this->xiaoshu>0){
$ustr= 'decimal('.$lens.', '.$this->xiaoshu.')';
}
}
if($ustr!=''){
if(!isempt($dev) && !contain($dev,'{'))$ustr.= " DEFAULT '$dev'";
$ustr= "ALTER TABLE `[Q]".$tables."` MODIFY column `$fields` ".$ustr." COMMENT '$name'";
$this->db->query($ustr);
}
}
}
public function reloadpipeiAjax()
{
$mid = (int)$this->post('mid');
$whe = '';
if($mid>0)$whe=' and id='.$mid.'';
echo m('flow')->repipei($whe);
}
public function setwherelistafter($table, $rows)
{
$dbs = m('flow_where');
foreach($rows as $k=>$rs){
$shu = $dbs->rows("`setid`='".$rs['id']."'");
if($shu>0)$rows[$k]['shu'] = $shu;
}
return array('rows'=>$rows);
}
public function setcourselistafter($table, $rows)
{
$dbs = m('flow_course');
foreach($rows as $k=>$rs){
$shu = $dbs->rows("`setid`='".$rs['id']."'");
if($shu>0)$rows[$k]['shu'] = $shu;
}
return array('rows'=>$rows);
}
public function setcourselistbefore($table)
{
$where = '';
$key = $this->post('key');
if(!isempt($key)){
$where = "and (`type`='$key' or `name` like '%$key%' or `table` like '$key%' or `num` like '$key%' or `sericnum` like '$key%')";
}
return $where;
}
//删除模块
public function delmodeAjax()
{
$id = (int)$this->post('id','0');
return $this->delmode($id, true);
}
private function delmode($id, $dm=false)
{
if($this->getsession('isadmin')!='1')return '非管理员不能操作';
$mrs = m('flow_set')->getone($id);
if(!$mrs)return '模块不存在';
$num = $mrs['num'];
if($num!='demo' && $mrs['type']=='系统')return '系统类型模块不能删除清空';
/*
//防止误删2024-09-11已弃用
$flow = m('flow')->initflow($num);
$table = $mrs['table'];
$where = $mrs['where'];
if(!isempt($where)){
$where = $this->rock->covexec($where);
$where = "and $where";
}else{
$where = '';
}
$rows = m($table)->getrows('1=1 '.$where.'');
foreach($rows as $k=>$rs){
$ssid = $rs['id'];
$flow->loaddata($ssid, false);
$flow->deletebill('清空模块数据', false);
}
*/
$name = $mrs['name'];
if($dm){
m('flow_set')->delete("`id`='$id'");
m('flow_course')->delete("`setid`='$id'");
m('flow_element')->delete("`mid`='$id'");
m('flow_extent')->delete("`modeid`='$id'");
m('flow_where')->delete("`setid`='$id'");
m('flow_menu')->delete("`setid`='$id'");
m('flow_todo')->delete("`setid`='$id'");
m('flow_todos')->delete("`modenum`='$num'");
m('log')->addlog('模块','删除模块['.$name.']');
}else{
m('log')->addlog('模块','清空模块['.$name.']的数据');
}
$this->db->query("alter table `[Q]$table` AUTO_INCREMENT=1");
return 'ok';
}
//清空模块上数据
public function clearallmodeAjax()
{
$id = (int)$this->post('id','0');
return $this->delmode($id, false);
}
//刷新序号
public function rexuhaoAjax()
{
$mid = (int)$this->get('modeid');
$db = m('flow_element');
$rows = $db->getall('mid='.$mid.' and iszb=0','id','sort asc,id asc');
foreach($rows as $k=>$rs)$db->update('sort='.$k.'',$rs['id']);
$rows = $db->getall('mid='.$mid.' and iszb=1','id','sort asc,id asc');
foreach($rows as $k=>$rs)$db->update('sort='.$k.'',$rs['id']);
$rows = $db->getall('mid='.$mid.' and iszb=2','id','sort asc,id asc');
foreach($rows as $k=>$rs)$db->update('sort='.$k.'',$rs['id']);
$rows = $db->getall('mid='.$mid.' and iszb=3','id','sort asc,id asc');
foreach($rows as $k=>$rs)$db->update('sort='.$k.'',$rs['id']);
}
public function flowcourselistbefore($rows)
{
return array('order'=>'pid,sort');
}
//流程步骤显示
public function flowcourselistafter($table, $rows)
{
$arr = array();$pid = -1;$maxpid = -1;
foreach($rows as $k=>$rs){
if($rs['pid'] != $pid){
$recename = $this->rock->arrvalue($rs, 'recename');
if(isempt($recename))$recename = '全体人员';
$arr[] = array(
'name' => '流程'.($rs['pid']+1).',适用:'.$recename.'',
'level' => 1,
'stotal'=> 1,
'status'=> 1,
'iszf' => 0,
'id' => $rs['id'],
'pid' => $rs['pid'],
'sort' => 0,
'recename' => '',
);
}
$rs['level'] = 2;
$rs['stotal'] = 0;
$arr[] = $rs;
$pid = $rs['pid'];
$maxpid = $pid;
}
return array(
'rows' => $arr,
'maxpid' => $maxpid+1,
);
}
//生成列表页面
public function changeliebAjax()
{
$modeid = (int)$this->post('modeid');
$path = m('mode')->createlistpage($modeid);
if($path=='')$path = '无法生成,可能没权限写入'.P.'/flow/page目录';
echo $path;
}
//生成所有
public function allcreateAjax()
{
$dbs = m('mode');
$rows = $dbs->getall("`status`=1");
$oi = 0;
$msg = '';
foreach($rows as $k=>$rs){
$path = $dbs->createlistpage($rs,1);
if($path=='none')continue;
if($path==''){
if($path=='')$msg = '无法生成,可能没权限写入'.P.'/flow/page目录';
break;
}else{
$oi++;
}
}
if($msg=='')$msg='已生成'.$oi.'个模块,可到'.P.'/flow/page下查看';
echo $msg;
}
public function savecolunmsAjax()
{
$num = $this->post('num');
$modeid = (int)$this->post('modeid');
$str = $this->post('str');
if($str){
$this->option->setval($num.'@'.(-1*$modeid-1000), $str,'模块列定义');
}else{
$this->option->delete("`num`='$num'");
}
//$path = m('mode')->createlistpage($modeid);
$msg = 'ok';
//if($path=='')$msg='已保存,但无法从新生成列表页,自定义列将不能生效';
echo $msg;
}
//选择人员组
public function getcnameAjax()
{
$arr = array();
$rows = m('flow_cname')->getall("`pid`=0 and `num` is not null",'num,name','`sort`');
foreach($rows as $k=>$rs)$arr[] = array('name'=>$rs['name'],'value'=>$rs['num']);
return $arr;
}
//图形的流程管理
public function courseflowinitAjax()
{
$setid = (int)$this->get('setid','0');
return m('flowcourse')->getCoursedata($setid);
}
public function courseflowdelAjax()
{
$id = (int)$this->get('id','0');
m('flowcourse')->delete($id);
}
public function coursesavebefore($table, $arr)
{
$mid = (int)arrvalue($arr,'mid','0');
$setid = (int)arrvalue($arr,'setid','0');
$nid = (int)arrvalue($arr,'nid','0');
if($mid>0 && m($table)->rows("`setid`='$setid' and `id`='$mid'")==0)return '上级步骤ID['.$mid.']不存在';
if($nid>0 && m($table)->rows("`setid`='$setid' and `id`='$nid'")==0)return '下级步骤ID['.$nid.']不存在';
$str = m('where')->checkwhere($setid, $arr['where']);
if($str)return $str;
}
public function getfieldsAjax()
{
$setid = (int)$this->get('setid','0');
$rows = m('flow_element')->getrows('`mid`='.$setid.' and `iszb`=0','name,fields,data,fieldstype','`sort`');
$arr = array();
foreach($rows as $k=>$rs){
//$arr[] = array(
// 'name' => $rs['name'].'('.$rs['fields'].')',
// 'value' => $rs['fields'],
//);
$fieldstype = $rs['fieldstype'];
if(in_array($fieldstype, array('changeuser','changeusercheck')) && !isempt($rs['data'])){
$arr[] = array(
'name' => $rs['name'].'('.$rs['data'].')',
'value' => $rs['data'],
);
}
}
return $arr;
}
public function savebeforecname($table, $arr, $id)
{
$num = $arr['num'];
$to = m('flowcname')->rows("`id`<>'$id' and `num`='$num'");
if($to>0)return '编号['.$num.']已存在';
}
/**
* 复制模块
*/
public function copymodeAjax()
{
$id = (int)$this->post('id','0');
$bhnu = strtolower(trim($this->post('name')));
if(isempt($bhnu))return '新模块编号不能为空';
if(is_numeric($bhnu))return '模块编号不能用数字';
if(strlen($bhnu)<4)return '编号至少要4位';
if(c('check')->isincn($bhnu))return '编号不能包含中文';
$dbs = m('mode');
if($dbs->rows("`num`='$bhnu'")>0)return '模块编号['.$bhnu.']已存在';
$mrs = $dbs->getone($id);
if(!$mrs)return '模块不存在';
$ars = $mrs;
$name = $mrs['name'].'复制';
$biaom = $bhnu;
$obha = $mrs['num'];
unset($ars['id']);
$ars['name'] = $name;
$ars['num'] = $bhnu;
$ars['table']= $biaom;
$tablea[] = $mrs['table'];
$tables = '';
if(!isempt($ars['tables'])){
$staba = explode(',', $ars['tables']);
foreach($staba as $kz=>$zb1){
$tables.=','.$biaom.'zb'.($kz+1).'';
if(!in_array($zb1, $tablea))$tablea[]=$zb1;
}
$tables = substr($tables, 1);
}
$ars['tables'] = $tables;
$modeid = $dbs->insert($ars);
//复制表
foreach($tablea as $kz=>$tabs){
$sqla = $this->db->getall('show create table `[Q]'.$tabs.'`');
$createsql = $sqla[0]['Create Table'];
$biaom1 = ''.PREFIX.''.$biaom.'';
if($kz>0)$biaom1 = ''.PREFIX.''.$biaom.'zb'.$kz.'';
$createsql = str_replace('`'.PREFIX.''.$tabs.'`','`'.$biaom1.'`',$createsql);
$this->db->query($createsql);
$this->db->query('alter table `'.$biaom1.'` AUTO_INCREMENT=1');
}
//复制表单元素
$db1 = m('flow_element');
$rows = $db1->getall('mid='.$id.'');
foreach($rows as $k1=>$rs1){
$rs2 = $rs1;
unset($rs2['id']);
$rs2['mid'] = $modeid;
$db1->insert($rs2);
}
//复制相关布局文件
$hurs = $this->getfiles();
foreach($hurs as $k=>$file){
$from = str_replace('{bh}',$obha,$file);
$to = str_replace('{bh}',$bhnu,$file);
if(file_exists($from)){
if($k<=1){
$fstr = file_get_contents($from);
if($k==0)$fstr = str_replace('flow_'.$obha.'ClassModel','flow_'.$bhnu.'ClassModel',$fstr);
if($k==1)$fstr = str_replace('mode_'.$obha.'ClassAction','mode_'.$bhnu.'ClassAction',$fstr);
$this->rock->createtxt($to, $fstr);
}else{
@copy($from, $to);
}
}
}
echo 'ok';
}
public function getfiles()
{
$hurs[] = ''.P.'/model/flow/{bh}Model.php'; //模块接口文件
$hurs[] = ''.P.'/flow/input/mode_{bh}Action.php'; //模块控制器
$hurs[] = ''.P.'/flow/input/inputjs/mode_{bh}.js'; //模块录入js文件
$hurs[] = ''.P.'/flow/page/input_{bh}.html'; //PC录入模版
$hurs[] = ''.P.'/flow/page/view_{bh}_0.html'; //PC展示模版
$hurs[] = ''.P.'/flow/page/view_{bh}_1.html'; //手机展示模版
$hurs[] = ''.P.'/flow/page/view_{bh}_2.html'; //打印布局
$hurs[] = ''.P.'/flow/page/viewpage_{bh}.html'; //子模版展示
$hurs[] = ''.P.'/flow/page/viewpage_{bh}_0.html';//子模版PC展示
$hurs[] = ''.P.'/flow/page/viewpage_{bh}_1.html';//子模版手机展示
return $hurs;
}
public function loadmodeinfoAjax()
{
if(getconfig('systype')=='demo')return returnerror('演示不要操作');
if(!getconfig('rockinzip'))return returnerror('系统未开启此功能');
$sid = $this->get('sid');
$rows = m('flow_set')->getall('`id` in('.$sid.')','*','sort asc');
$ids = '';
$mname= '';
$table= '';
$file = '';
$hurs = $this->getfiles();
$hurs[] = ''.P.'/flow/page/rock_page_{bh}.php';
$hurs[] = ''.P.'/flow/page/rock_page_{bh}_script.php';
foreach($rows as $k=>$rs){
$ids.=','.$rs['id'].'';
$table.=','.$rs['table'].'';
if(!isempt($rs['tables']))$table.=','.$rs['tables'].'';
$mname.=''.$rs['name'].'('.$rs['num'].') &nbsp;';
foreach($hurs as $k=>$wj){
$wjs = str_replace('{bh}',$rs['num'],$wj);
if(file_exists($wjs))$file.=','.$wjs.'';
}
}
if($ids)$ids = substr($ids,1);
if($table)$table = substr($table,1);
if($file)$file = substr($file,1);
$barr['mode'] = $ids;
$barr['mname'] = $mname;
$barr['table'] = $table;
$barr['file'] = $file;
return returnsuccess($barr);
}
public function loadoteinAjax()
{
if(getconfig('systype')=='demo')return returnerror('演示不要操作');
if(!getconfig('rockinzip'))return returnerror('系统未开启此功能');
$lx = $this->post('lx');
$sid = $this->post('sid');
$barr = array();
$stsa = explode(',', $sid);
if($lx==1){
$alltabls = $this->db->getalltable();
foreach($stsa as $tab){
if(!in_array(''.PREFIX.$tab.'', $alltabls))return returnerror(''.$tab.'表不存在');
}
$barr['table'] = $sid;
}
if($lx==2){
foreach($stsa as $tab)if(!file_exists($tab))return returnerror(''.$tab.'文件不存在');
$barr['file'] = $sid;
}
if($lx==3){
$rows = m('menu')->getall('`id` in('.$sid.') and `status`=1');
$ids = '';
$mname= '';
foreach($rows as $k=>$rs){
$ids.=','.$rs['id'].'';
$mname.=''.$rs['name'].'('.$rs['url'].') &nbsp;';
}
if($ids){
$barr['menu'] = substr($ids,1);
$barr['menu_str'] = $mname;
}
}
if($lx==4){
$rows = m('im_group')->getall('`id` in('.$sid.') and `valid`=1 and `type`=2');
$ids = '';
$mname= '';
$fstr = '';
foreach($rows as $k=>$rs){
$ids.=','.$rs['id'].'';
$mname.='<img src="'.$rs['face'].'" align="absmiddle" width="20px" height="20px">'.$rs['name'].' &nbsp;';
$fstr.=','.$rs['face'].'';
$fled = 'webmain/we/ying/yingyong/'.$rs['num'].'.html';
if(file_exists($fled))$fstr.=','.$fled.'';
$fled = 'webmain/we/ying/yingyong/'.$rs['num'].'.js';
if(file_exists($fled))$fstr.=','.$fled.'';
$fled = 'webmain/we/ying/yingyong/ying_'.$rs['num'].'Class.php';
if(file_exists($fled))$fstr.=','.$fled.'';
$fled = 'webmain/model/agent/'.$rs['num'].'Model.php';
if(file_exists($fled))$fstr.=','.$fled.'';
}
if($ids){
$barr['agent'] = substr($ids,1);
$barr['agent_str'] = $mname;
}
if($fstr)$barr['file'] = substr($fstr,1);
}
return returnsuccess($barr);
}
public function createinstseAjax()
{
if(!class_exists('ZipArchive'))return returnerror('没有zip扩展无法使用');
if(getconfig('systype')=='demo')return returnerror('演示不要操作');
if(!getconfig('rockinzip'))return returnerror('系统未开启此功能');
$name = $this->post('name');
if(!$name)$name=TITLE.'_生成包';
$signstr = '';
$str = "<?php
//安装包的配置文件
return array(
'name' => '$name', //名称
'ver' => '".$this->post('ver')."', //版本
'minver'=>'".VERSION."',
'zuozhe' => '".$this->post('zuozhe')."', //作者
'explain' => '".$this->post('explain')."', //说明
'updatedt'=> '$this->now', //时间
'signstr' => '$signstr', //这个是签名
);";
$path = ''.UPDIR.'/logs/xhazbao_'.time().'';
$this->rock->createtxt(''.$path.'/installconfig/xinhuoa_config.php', $str);
//复制文件
$file = $this->post('file');
if($file){
$filea = explode(',', $file);
foreach($filea as $fid1){
if(file_exists($fid1)){
$this->rock->createdir($path.'/'.$fid1);
copy(ROOT_PATH.'/'.$fid1, ROOT_PATH.'/'.$path.'/'.$fid1);
}
}
}
$data = array();
$modeid = $this->post('mode');
$menuid = $this->post('menu');
$tabless = $this->post('table');
$agentid = $this->post('agent');
if($menuid){
$rows = $this->db->getall("select * from `[Q]menu` where id in($menuid)");
$data['menu'] = $this->shangxiajich($rows,'pid');
}
if($modeid){
//创建模块文件
$mode = $this->db->getall("select * from `[Q]flow_set` where `id` in($modeid)");
$cdata= array();
foreach($mode as $k=>$rs){
$id = $rs['id'];
//元素
$flow_element = $this->db->getall("select * from `[Q]flow_element` where mid='$id'");
//权限
$flow_extent = $this->db->getall("select * from `[Q]flow_extent` where modeid='$id'");
//单据操作菜单
$flow_menu = $this->db->getall("select * from `[Q]flow_menu` where setid='$id'");
//模块条件
$flow_where = $this->db->getall("select * from `[Q]flow_where` where setid='$id'");
//审核步骤,有上下级关系
$flow_courses = $this->db->getall("select * from `[Q]flow_course` where setid='$id'");
$flow_course = $this->shangxiajich($flow_courses,'mid');
//单据通知设置
$flow_todo = $this->db->getall("select * from `[Q]flow_todo` where setid='$id'");
//unset($rs['id']);
if($rs['isflow']>2)$rs['isflow']='1';
$cdata[$rs['num']] = array(
'flow_set' => $rs,
'flow_element' => $flow_element,
'flow_extent' => $flow_extent,
'flow_menu' => $flow_menu,
'flow_where' => $flow_where,
'flow_course' => $flow_course,
'flow_todo' => $flow_todo,
);
}
$data['mode'] = $cdata;
}
//应用的数据
if($agentid){
$yyrows = $this->db->getall("select * from `[Q]im_group` where valid=1 and type=2 and id in($agentid)");
$yydata = array();
foreach($yyrows as $k=>$rs){
$menu = $this->db->getall("select * from `[Q]im_menu` where mid='".$rs['id']."'");
$yydata[] = array(
'data' => $rs,
'menu' => $this->shangxiajich($menu,'pid', 'menusub')
);
}
$data['yydata']= $yydata;
}
if($data){
$this->rock->createtxt($path.'/installconfig/xinhuoa_data.json', json_encode($data));
}
//数据库
if($tabless){
$data = array();
$yaotable = explode(',', $tabless);
foreach($yaotable as $tabs){
$fields = $this->db->gettablefields(PREFIX.$tabs);
$shwdat = array(
'fields' => $fields,
);
$sqla = $this->db->getall('show create table `'.PREFIX.$tabs.'`');
$createsql = $sqla[0]['Create Table'];
$crse = explode('ENGINE', $createsql);
$createsql = $crse[0].'ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8';
$shwdat['createsql'] = str_replace('`'.PREFIX.$tabs.'`','`[Q]'.$tabs.'`', $createsql);
$data[$tabs] = $shwdat;
}
if($data)$this->rock->createtxt($path.'/installconfig/xinhuoa_mysql.json', json_encode($data));
}
$topath = UPDIR.'/logs/xinhuoa_install_'.time().'.zip';
$this->rock->createtxt($topath, '');
c('zip')->packzip($path, $topath);
return returnsuccess('生成成功,点我<a href="'.$topath.'">下载</a>。');
}
//上下级处理
public function shangxiajich($rows, $fid, $ds='children')
{
$this->rsxiada = array();
$sarrr = array();
foreach($rows as $k=>$rs){
$children = $this->shangxiajichs($rows, $fid, $rs['id']);
if($children)$rs[$ds] = $children;
$sarrr[]= $rs;
}
$barr = array();
foreach($sarrr as $k=>$rs){
if(!isset($this->rsxiada[$rs['id']]))$barr[] = $rs;
}
return $barr;
}
public function shangxiajichs($rows, $fid, $pid)
{
$arr = array();
foreach($rows as $k=>$rs){
if($rs[$fid]==$pid){
$this->rsxiada[$rs['id']] = $rs['id'];
$children = $this->shangxiajichs($rows, $fid, $rs['id']);
if($children)$rs['children'] = $children;
$arr[] = $rs;
}
}
return $arr;
}
}