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('', '↓多行子表', 0);
foreach($tablea as $k=>$rs1){
$fleft[]= array('subdata'.$k.'', $namesa[$k], 0);
}
}
if($rs['isflow']>0){
$fleft[]= array('', '↓流程审核步骤', 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('', '—第'.$iszbs.'个多行子表—', $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 = '\'错误提示内容\',\'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 '
无法创建文件:'.$apaths.',会导致录入数据无法保存,请手动创建!代码内容如下:
<?php
class mode_'.$modenum.'ClassAction extends inputAction
{
}
';
}
private function geuolvstr($str)
{
$str = str_replace(array('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.='';
}
if($fl!='defv'){
$s.='
'.$fl.'
';
}
$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.='| '.arrvalue($tablesn, $k).' |
';
$s.='| '.$str.' |
';
}
}
if($xgwj==1)$s.='^file_content^ | {file_content} | ';
if($base==1)$s.='| ^base_name^ | {base_name} | ^base_deptname^ | {base_deptname} |
';
$s.='';
return $s;
}
public function yubustsin($rows, $yczd)
{
$zhang = array('textarea','htmlediter','uploadfile','uploadimg','changedeptusercheck');
$s = '';
$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.=' | |
';
$s.='| '.$name.' | {'.$rs['fields'].'}'.$yczd.' | ';
if($xuo==1)$xuo=2;
}else{
$s.=''.$name.' | {'.$rs['fields'].'}'.$yczd.' | ';
}
$yczd='';
if($xuo==2){
$s.='
';
if($k<$zlen)$s.='';
$xuo=0;
}
if($xuo==1 && $k==$zlen){
$s.=' | |
';
}
}
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');
$mcom = m('company');
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->rsreplace($rs, 2, null, 1);
$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']."'");
$comid = arrvalue($rs,'comid');
$narr['comid'] = $comid;
if($comid){
$cmrs = $mcom->getXinxi($rs['comid']);
if($cmrs)$narr['comid'] = $cmrs['id'].'.'.$cmrs['name'];
}
$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();$this->rock->debugs($_fieldsa,'fields');
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'].') ';
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'].') ';
}
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.='
'.$rs['name'].' ';
$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 = " '$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('生成成功,点我下载。');
}
//上下级处理
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;
}
public function opentixingAjax()
{
$fields = $this->get('fields');
if(c('check')->onlynumber($fields))return '错误';
$value = (int)$this->get('value');
m('flow_set')->update("`$fields`='$value'", 'id>0');
return '处理成功';
}
}