| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- class whereClassModel extends Model
- {
- private $moders = array();
- private $ursarr = array();
- private $admindbs;
-
- public function initModel()
- {
- $this->settable('flow_where');
- $this->admindbs = m('admin');
- }
-
- /**
- * 条件格式化,返回是没有and开头的
- */
- public function getstrwhere($str, $uid=0, $fid='')
- {
- if(isempt($str))return '';
- if($uid==0)$uid = $this->adminid;
- $dbs = $this->admindbs;
- if(isset($this->ursarr[$uid])){
- $urs = $this->ursarr[$uid];
- }else{
- $urs = $dbs->getone($uid);
- $this->ursarr[$uid] = $urs;
- }
-
- $companyid = arrvalue($urs, 'companyid','0'); //对应单位ID
- $deptid = arrvalue($urs, 'deptid','0'); //部门ID
- if(ISMORECOM){
- $comid = arrvalue($urs, 'comid','0');
- if($comid>'0')$companyid = $comid;
- }
-
- $sw1 = $this->rock->dbinstr('superid',$uid);
- $super = "select `id` from `[Q]admin` where $sw1";//我的直属下属
- $allsuper = "select `id` from `[Q]admin` where instr(`superpath`,'[$uid]')>0"; //我所有下属的下属
- $companys = "select `id` from `[Q]admin` where `companyid`=".$companyid.""; //对应单位下的
-
-
- //加上a.
- $str = str_replace('[A]`uid`','`uid`', $str);
- $str = str_replace('[A]uid','`uid`', $str);
- $barr = $this->rock->matcharr($str,2);
- $itsha= array('status','uid','optid','optname','applydt','createdt','createid');
- $thar = array();
- foreach($barr as $bsuid){
- if(in_array($bsuid, $itsha) && !in_array($bsuid, $thar)){
- $thar[] = $bsuid;
- $str = str_replace('`'.$bsuid.'`','{asqom}`'.$bsuid.'`', $str);
- }
- }
-
- $str = m('base')->strreplace($str, $uid);
- $str = str_replace(array('{super}','{allsuper}','{company}'), array($super,$allsuper,$companys), $str);
-
- //未读替换
- if(contain($str,'{unread}')){
- $rstr = '';
- if($this->moders){
- $ydid = m('log')->getread($this->moders['table'], $uid);
- $rstr = '{asqom}`id` not in('.$ydid.')';
- }
- $str = str_replace('{unread}', $rstr, $str);
- }
- //已读替换
- if(contain($str,'{read}')){
- $rstr = '';
- if($this->moders){
- $ydid = m('log')->getread($this->moders['table'], $uid);
- $rstr = '{asqom}`id` in('.$ydid.')';
- }
- $str = str_replace('{read}', $rstr, $str);
- }
- //receid
- if(contain($str,'{receid}')){
- $rstr= $dbs->getjoinstr('{asqom}`receid`', $uid, 1);
- $str = str_replace('{receid}', '('.$rstr.')', $str);
- }
- //本周一{weekfirst}
- if(contain($str,'{weekfirst}')){
- $rstr= c('date')->getweekfirst($this->rock->date);
- $str = str_replace('{weekfirst}', $rstr, $str);
- }
- //本周日{weeklast}
- if(contain($str,'{weeklast}')){
- $rstr= c('date')->getweeklast($this->rock->date);
- $str = str_replace('{weeklast}', $rstr, $str);
- }
- $barr = $this->rock->matcharr($str);
- foreach($barr as $match){
- $rstr = $type = '';
- $_artr= explode(',', $match);
- $fie = $_artr[0];
- if($fie=='asqom')continue;
- if(isset($_artr[1]))$type = $_artr[1];
- //包含uid里面:{uid,uidin}
- if($type=='uidin'){
- $rstr= $this->rock->dbinstr('{asqom}`'.$fie.'`', $uid);
- }
- //我直属下级:{uid,down}
- if($type=='down'){
- $rstr= $dbs->getdownwhere('{asqom}`'.$fie.'`', $uid, 1);
- }
- //我全部直属下级:{uid,downall}
- if($type=='downall'){
- $rstr= $dbs->getdownwhere('{asqom}`'.$fie.'`', $uid, 0);
- }
- //字段包含部门人员Id:{uid,receall}
- if($type=='receall'){
- $rstr= $dbs->getjoinstr('{asqom}`'.$fie.'`', $uid, 1);
- }
- //字段包含部门人员Id,空全部:{uid,recenot}
- if($type=='recenot'){
- $rstr= $dbs->getjoinstr('{asqom}`'.$fie.'`', $uid, 1, 1);
- }
- //我的同级部门人员:{uid,dept}
- if($match=='dept'){$type = 'dept';$fie = 'uid';}
- if($type=='dept'){
- $rstr= '{asqom}`'.$fie.'` in(select `id` from `[Q]admin` where `deptid`='.$deptid.' or '.$this->rock->dbinstr('deptids',$deptid).')';
- }
- //我的同级部门人员(含子部门):{uid,deptall}
- if($match=='deptall'){$type = 'deptall';$fie = 'uid';}
- if($type=='deptall'){
- $rstr= '{asqom}`'.$fie.'` in(select `id` from `[Q]admin` where instr(`deptpath`,\'['.$deptid.']\')>0)';
- }
- //所属单位:{uid,company}
- if($type=='company'){
- $rstr= '{asqom}`'.$fie.'` in('.$companys.')';
- }
- $str = str_replace('{'.$match.'}', '( '.$rstr.' )', $str); //加上括号
- }
- return $str;
- }
-
- public function getflowwhere($id, $uid=0, $fid='')
- {
- if(is_array($id)){
- $rs = $id;
- }else{
- $swhe = "`num`='$id'";
- if(is_numeric($id))$swhe=$id;
- $rs = $this->getone($swhe);
- }
- if(!$rs)return false;
- if($fid=='')$fid='`uid`';
- $modeid = (int)$rs['setid'];
- $this->moders = m('flow_set')->getone($modeid);
-
- $wheresstr = $this->getstrwhere($this->rock->jm->base64decode($rs['wheresstr']), $uid, $fid);
- $whereustr = $this->getstrwhere($this->rock->jm->base64decode($rs['whereustr']), $uid, $fid);
- $wheredstr = $this->getstrwhere($this->rock->jm->base64decode($rs['wheredstr']), $uid, $fid);
- $str = $wheresstr;if(isempt($str))$str='';
- $ustr = $nstr = '';
- if(!isempt($rs['receid'])){
- $tsrt = m('admin')->gjoin($rs['receid'],'ud', 'where');
- if($tsrt=='all'){
- $tsrt = '1=1';
- }else{
- $tsrt = '('.$tsrt.')';
- }
- $ustr = $tsrt;
- }
- if(!isempt($whereustr)){
- if($ustr!='')$ustr.=' and ';
- $ustr .= $whereustr;
- }
-
- if(!isempt($rs['nreceid'])){
- $tsrt = m('admin')->gjoin($rs['nreceid'],'ud', 'where');
- if($tsrt=='all'){
- $tsrt = '1=1';
- }
- $nstr = $tsrt;
- }
- if(!isempt($wheredstr)){
- if($nstr!='')$nstr.=' or ';
- $nstr .= $wheredstr;
- }
- $astr = $str;
- if($ustr != '' || $nstr != ''){
- $_sar= '1=1';
- if($ustr!='')$_sar.=' and '.$ustr.'';
- if($nstr!='')$_sar.=' and not ('.$nstr.')';
- if(!isempt($astr))$astr.=' and ';
- $astr .= '{asqom}'.$fid.' in(select `id` from `[Q]admin` where '.$_sar.')';
- }
- return array(
- 'str' => $str,
- 'utr' => $ustr,
- 'ntr' => $nstr,
- 'atr' => $astr
- );
- }
-
- public function getwherestr($id, $uid=0, $fid='', $lx=0)
- {
- $where = '';
- $arr = $this->getflowwhere($id, $uid, $fid);
- if($arr){
- $where = $arr['atr'];
- if($lx==0 && !isempt($where))$where = ' and '.$where;
- }
- return $where;
- }
-
-
- public function getmywhere($modeid,$uid=0, $pnum='')
- {
- if($uid==0)$uid = $this->adminid;
- $where = m('admin')->getjoinstr('syrid', $uid, 1);
- $where = '`status`=1 and `setid`='.$modeid.' and `num` is not null and `islb`=1 ';//and ('.$where.')
- if(isempt($pnum)){
- $where .=" and ifnull(`pnum`,'')=''";
- }else{
- $where .=" and `pnum`='$pnum'";
- }
- $rows = $this->getrows($where, '`id`,`num`,`name`', '`sort`');
- return $rows;
- }
-
-
- /**
- * 判断条件是否可以使用$modeid模块id,$str条件
- */
- public function checkwhere($modeid, $str)
- {
- if(isempt($str) || $this->rock->post('yuanwhere')!='1')return '';
- $where = $this->rock->jm->base64decode($str);
- if($where=='all' || contain($where, '{super}') ||
- contain($where, '{allsuper}') ||
- contain($where, '{company}'))return '';
- $moders = m('flow_set')->getone($modeid);
- $this->moders = $moders;
- $where = $this->getstrwhere($where);
- $stable = $moders['table'];
- $where = '`id`=0 and '.str_replace('{asqom}','', $where);
- $sql = 'select * from `[Q]'.$stable.'` a where '.$where.'';
- $bool = $this->db->query($sql, false);
- if(!$bool)return '条件不能使用:'.$this->db->errorlast.'<hr>'.$this->db->getLastSql().'';
- return '';
- }
- }
|