ajaxbool = $this->rock->jm->gettoken('ajaxbool', 'false');
$this->adminid = (int)$this->getsession('adminid',0);
$this->adminuser = $this->getsession('adminuser');
$this->adminname = $this->getsession('adminname');
$this->admintoken = $this->getsession('admintoken');
$this->companyid = $this->getsession('companyid');
$this->setNowUser($this->adminid, $this->adminname, $this->adminuser);
$agid = $this->rock->get('agentid');
if($agid!='')$this->rock->savesession(array('wxqyagentid' => $agid));
$platsign= $this->rock->get('platsign');
if($platsign!='')$this->rock->savesession(array('platsign' => $platsign));
$olaizhi= $this->rock->get('olaizhi');
if($olaizhi!='')$this->rock->savesession(array('olaizhi' => $olaizhi));
if($lx==0)$this->logincheck();
}
public function setNowUser($uid, $uname, $user='')
{
$this->rock->adminid = $uid;
$this->rock->adminname = $uname;
$this->rock->adminuser = $user;
}
public function pannouser()
{
$nots = getconfig('notuserids');
if($nots && contain(','.$nots.',',','.$this->adminid.','))exit('无效用户登录');
}
//免登录验证,用于订阅报表的
private function loginsubscribe()
{
$subscribe_key = $this->post('subscribe_key');
$subscribe_post = $this->post('subscribe_post');
if(isempt($subscribe_key) || isempt($subscribe_post))return false;
$url = $this->rock->nowurl();
$time = time(); $time1 = $time+1;
$keyarr = array(md5($url.$time.$subscribe_post),md5($url.$time1.$subscribe_post));
if(!in_array($subscribe_key, $keyarr))return false;
$opkey = $this->option->getval('subscribe_key');
if(!in_array($opkey, $keyarr))return false;
$adminid = (int)$this->post('subscribe_adminid','0');
$this->setNowUser($adminid,'');
return true;
}
protected function loginnot($ismo=false)
{
if($this->loginsubscribe())return;//免验证
$uid = (int)$this->getsession('adminid',0);
if($uid==0){
$lurl = '?m=login';
if($this->rock->ismobile() || $ismo)$lurl='?d=we&m=login';
if(ENTRANCE != 'index')$lurl = 'index.php'.$lurl.'';
$backurl = $this->rock->jm->base64encode($this->rock->nowurl());
if($backurl!='' && M!='index')$lurl = $lurl.'&backurl='.$backurl.'';
if(!isajax())$this->rock->location($lurl); //不是ajax跳转到登录页面
echo '没有登录,去[登录]';
exit();
}
}
protected function logincheck()
{
$this->loginnot();
}
public function initProject()
{
$this->getlogin();
if($this->rock->get('ajaxbool')=='true')return;
$this->smartydata['adminid'] = $this->adminid;
$this->smartydata['adminuser'] = $this->adminuser;
$this->smartydata['adminname'] = $this->adminname;
$this->smartydata['logintime'] = $this->getsession('logintime');
$cenghei = (int)$this->get('cenghei','0');
if($cenghei==0)$cenghei = $this->getsession('cenghei','0');
$this->assign('cenghei', $cenghei);
$this->rock->savesession(array('cenghei' => $cenghei));
}
private function iszclogin()
{
$this->pannouser();
if($this->loginsubscribe())return;//免验证
$token = $this->admintoken;
if(isempt($token))exit('sorry1');
$lastt = date('Y-m-d H:i:s',time()-24*3600);
$rs = m('logintoken')->getone("`uid`='$this->adminid' and `token`='$token' and `online`=1 and `moddt`>='$lastt'",'`moddt`');
if(!$rs)$this->backmsg('登录失效,请重新登录');
}
public function backmsg($msg='', $demsg='保存成功', $da=array())
{
backmsg($msg,$demsg,$da);
}
public function limitRows($table,$fields='*',$wherea='1=1',$order='',$arr=array())
{
$where = $this->request('where');
$keywhere = $this->request('keywhere');
if(!isempt($where)){
$where = $this->jm->uncrypt($this->rock->iconvsql($where));
$where = $this->db->filterstr($this->rock->covexec($where));
}
if(!isempt($keywhere)){
$keywhere = $this->jm->uncrypt($this->rock->iconvsql($keywhere));
$keywhere = $this->db->filterstr($this->rock->covexec($keywhere));
}
$wherea .= " $where $keywhere";
$order = $this->getOrder($order);
$group = '';
if(isset($arr['group']) && !isempt($arr['group']))$group="GROUP BY ".$arr['group']." ";
$limitall = false;
if(isset($arr['all']))$limitall= $arr['all'];
if(isset($arr['sou'])){
$wherea = str_replace($arr['sou'],$arr['rep'],$wherea);
$order = str_replace($arr['sou'],$arr['rep'],$order);
}
$sql = "select[SQL_CALC] $fields from $table where $wherea $group $order ";
$total = 0;
if($group!=''){
$sql = str_replace('[SQL_CALC]', ' SQL_CALC_FOUND_ROWS', $sql);
}else{
$sql = str_replace('[SQL_CALC]','',$sql);
$total = $this->db->rows($table, $wherea);
}
if(!$limitall)$sql.=' '.$this->getLimit();
$rows = $this->db->getall($sql);
if($group!='')$total = $this->db->found_rows();
if(!is_array($rows))$rows = array();
return array(
'total' => $total,
'rows' => $rows,
'sql' => $this->db->nowsql
);
}
public function getLimit()
{
$start = (int)$this->rock->post('start',0);
$limit = (int)$this->rock->post('limit',15);
$str = '';
if($limit > 0)$str =" limit $start,$limit";
return $str;
}
public function getOrder($order='')
{
$sort = $this->rock->iconvsql($this->post('sort'),1);
$dir = strtolower($this->post('dir'));
$highorder = $this->rock->iconvsql($this->post('highorder'));
$asort = '';
if($sort != '' && $dir !=''){
if(!contain('ascdesc',$dir))$dir='desc';
$sorta = $sort;
$asort=' '.$sorta.' '.$dir.'';
}
if($asort != '')$order = $asort;
if($highorder != '')$order = $highorder;
if($order != '')$order=" order by $order ";
return $order;
}
public function publicdelAjax()
{
$this->iszclogin();
$id = c('check')->onlynumber($this->rock->post('id'));
$table = $this->rock->iconvsql($this->rock->post('table','',1),1);
$modenum= $this->rock->post('modenum');
if(getconfig('systype')=='demo')$this->showreturn('', '演示数据禁止删除', 201);
if($id=='')$this->showreturn('', 'sorry', 201);
$isadmin= (int)$this->getsession('isadmin');
$deltba = array('todo','option','menu','wouser');
if($modenum==''){
if($isadmin != 1 && $table!='todo')$this->showreturn('','只有管理员才能操作' , 201);
if(substr($table,0,5)=='flow_' || in_array($table, $deltba)){
m($table)->delete("`id` in($id)");
}else{
$this->showreturn('','未设置删除权限' , 201);
}
}else{
$aid = explode(',', $id);
foreach($aid as $mid){
$msg = m('flow')->deletebill($modenum, $mid, '');
if($msg != 'ok')$this->showreturn('', $msg, 201);
}
}
$this->showreturn('');
}
public function publicstoreAjax()
{
$this->iszclogin();
$table = $this->rock->xssrepstr($this->rock->iconvsql($this->request('tablename_abc','',1),1));
$fields = '*';
$group = '';
$order = $this->rock->iconvsql($this->request('defaultorder'));
$aftera = $this->request('storeafteraction');
$modenum = $this->post('modenum');
$atype = $this->post('atype');
$execldown = $this->request('execldown');
$this->loadci = (int)$this->request('loadci');
$where = '1=1 ';
$beforea = $this->request('storebeforeaction');
$tables = $this->T($table);
if($modenum != ''){
$this->flow = m('flow')->initflow($modenum);
$nas = $this->flow->billwhere($this->adminid, $atype);
$_wehs = $nas['where'];
if(!isempt($nas['order']))$order = $nas['order'];
if(!isempt($nas['fields']))$fields = $nas['fields'];
if(!isempt($this->rock->arrvalue($nas, 'group')))$group = $nas['group'];
if($_wehs!='')$where .= ' '.$_wehs.' ';
$_tabsk = $nas['table'];
if(contain($_tabsk,' ')){
$tables = $_tabsk;
}else{
$table = $_tabsk;
$tables = $this->T($table);
}
}
if($beforea != ''){
if(method_exists($this, $beforea)){
$nas = $this->$beforea($table);
if(is_array($nas)){
if(isset($nas['where']))$where .= $nas['where'];
if(isset($nas['order']))$order = $nas['order'];
if(isset($nas['fields']))$fields = $nas['fields'];
if(isset($nas['table']))$tables = $nas['table'];
if(isset($nas['group']))$group = $nas['group'];
}else{
$where .= $nas;
}
}
}
if($tables==PREFIX)exit('无效的访问');
$arr = $this->limitRows($tables, $fields, $where, $order, array(
'group' => $group
));
$total = $arr['total'];
$rows = $arr['rows'];
$bacarr = array(
'totalCount'=> $total,
'rows' => $rows
);
if(method_exists($this, $aftera)){
$narr = $this->$aftera($table, $rows);
if(is_array($narr)){
foreach($narr as $kv=>$vv)$bacarr[$kv]=$vv;
}
}
if($this->flow){
$rows = $bacarr['rows'];
foreach($rows as $k=>$rs){
if(isset($rs['status'])){
$rs['statustext'] = $this->flow->getstatus($rs,'','',1);
if($rs['status']==5)$rs['ishui'] = 1;
}
$rows[$k] = $this->flow->rsreplace($rs,2, $this);
}
$bacarr['rows'] = $this->flow->daochusubtable($rows);
}
if($execldown == 'true'){
$this->exceldown($bacarr);
return;
}
$this->returnjson($bacarr);
}
/**
* 验证签名
*/
public function checksignature($table)
{
if(!getconfig('checksign'))return true;//不验证
$sign = $this->post('sys_signature');
$time = $this->post('sys_timeature');
$signs= md5($this->rock->nowurl().$table.$time.'_'.$this->adminid);
return ($sign==$signs);
}
/**
* 公共保存页面
*/
public function publicsaveAjax()
{
$this->iszclogin();
$msg = '';
$success= false;
$table = $this->rock->xssrepstr($this->rock->iconvsql($this->post('tablename_postabc','',1),1));
$id = (int)$this->post('id');
$oldrs = false;
if(isempt($table))return returnerror('错误表名');
if(!$this->checksignature($this->post('tablename_postabc')))return returnerror('无效请求');
$db = m($table);
$where = "`id`='$id'";
if($id==0)$where='';
$modenum = $this->post('sysmodenumabc');
$flow = null;
$msgerrortpl = $this->post('msgerrortpl');
$aftersavea = $this->post('aftersaveaction', 'publicaftersave');
$beforesavea = $this->post('beforesaveaction', 'publicbeforesave');
$submditfi = $this->rock->jm->base64decode($this->post('submitfields_postabc'));
$editrecord = $this->post('editrecord_postabc'); //是否保存修改记录
$fileid = $this->post('fileid', '0');
$isturn = (int)$this->post('isturn_postabc', '1');
$int_type = ','.$this->post('int_filestype').',';
$md5_type = ','.$this->post('md5_filestype').',';
if(isempt($submditfi))return returnerror('无效字段');
if($modenum!='')$flow = m('flow')->initflow($modenum);
$fields = explode(',', $submditfi);
$uaarr = array();
foreach($fields as $field){
$field = $this->rock->xssrepstr($field);
$val = $this->post(''.$field.'');
$type = $this->post(''.$field.'_fieldstype');
$boa = true;
if($this->contain($int_type, ','.$field.',')){
$val = (int)$val;
}
if($this->contain($md5_type, ','.$field.',')){
if($val=='')$boa=false;
$val = md5($val);
}
if($boa)$uaarr[$field]=$val;
}
$otherfields = $this->post('otherfields');
$addotherfields = $this->post('add_otherfields');
$editotherfields = $this->post('edit_otherfields');
if($id == 0)$otherfields.=','.$addotherfields.'';
if($id > 0)$otherfields.=','.$editotherfields.'';
if($otherfields != ''){
$otherfields = str_replace(array('{now}','{date}','{admin}','{adminid}'),array($this->now,date('Y-m-d'),$this->adminname,$this->adminid),$otherfields);
if(contain($otherfields,'{companyid}'))$otherfields = str_replace('{companyid}',m('admin')->getcompanyid(),$otherfields);
$fiarsse = explode(',', $otherfields);
foreach($fiarsse as $ffes){
if($ffes!=''){
$ssare = explode('=', $ffes);
$lea = substr($ssare[1],0,1);
if($lea == '['){
$uaarr[$ssare[0]]=$uaarr[substr($ssare[1],1,-1)];
}else{
$uaarr[$ssare[0]]=$ssare[1];
}
}
}
}
$ss = '';
if(!$this->isempt($beforesavea)){
if(method_exists($this, $beforesavea)){
$befa = $this->$beforesavea($table, $uaarr, $id);
if(is_string($befa)){
$ss = $befa;
}else{
if(isset($befa['msg']))$ss=$befa['msg'];
if(isset($befa['rows'])){
foreach($befa['rows'] as $bk=>$bv)$uaarr[$bk]=$bv;
}
}
}
}
$msg = $ss;
$idadd = false;
if($msg == ''){
if($id>0 && $editrecord=='true')$oldrs = $db->getone($id);
$sbo = $db->record($uaarr, $where);
if($sbo){
$msg = '处理成功';
$success= true;
if($id == 0){
$id = $this->db->insert_id();
$idadd = true;
}
if($fileid !='0')m('file')->addfile($fileid,$table,$id, $modenum);
if(!$this->isempt($aftersavea)){
if(method_exists($this, $aftersavea)){
$this->$aftersavea($table, $uaarr, $id, $idadd);
}
}
//保存修改记录
if($oldrs && $flow!=null){
$newrs = $db->getone($id);
m('edit')->recordstr($flow->fieldsarr,$flow->mtable, $id, $oldrs, $newrs, 2);
}
}else{
$msg = 'mysqlerr:'.$this->db->lasterror();
}
}
if($msg=='')$msg='处理失败';
$arr = array('success'=>$success,'msg'=>$msg,'id'=>$id);
echo json_encode($arr);
}
public function publicsavevalueAjax()
{
$this->iszclogin();
$table = $this->rock->xssrepstr($this->rock->iconvsql($this->post('tablename','',1),1));
if(!$this->checksignature($this->post('tablename')))return '无效请求';
$noupf = array('pass','user');
$id = c('check')->onlynumber($this->post('id', '0'));
$fields = $this->post('fieldname');
if(in_array(strtolower($fields), $noupf))return 'error';
$value = $this->post('value');
$where = "`id` in($id)";
m($table)->record(array($fields=>$value), $where);
$fiesa = $this->rock->request('fieldsafteraction');
if($fiesa!=''){
if(method_exists($this, $fiesa)){
$this->$fiesa($table, $fields, $value, $id);
}
}
echo 'success';
}
public function exceldown($arr)
{
$fields = explode(',', $this->post('excelfields','',1));
$header = explode(',', $this->post('excelheader','',1));
$title = $this->post('exceltitle','',1);
$rows = $arr['rows'];
$exceltype = $this->post('exceltype','xls'); //保存文件类型
if(!in_array($exceltype, array('doc','html')))$exceltype = 'xls';
$headArr = array();
for($i=0; $iexecltable($title, $headArr, $rows, $exceltype);
$this->returnjson(array(
'url' => $url,
'totalCount'=> $arr['totalCount'],
'downCount' => count($rows)
));
}
public function getoptionAjax()
{
$num = $this->get('num');
$arr = m('option')->getdata($num);
echo json_encode($arr);
}
public function filejsbase()
{
$url = getconfig('rockfile_url');
if(!$url)return '';
return ''.chr(10).'';
}
}
class ActionNot extends Action
{
public function publicsavevalueAjax(){}
public function publicsaveAjax(){}
public function publicdelAjax(){}
public function publicstoreAjax(){}
public function publictreestoreAjax(){}
public function getoptionAjax(){}
protected function logincheck(){}
/**
* 手机端/单据详情页判断有没有登录就根据cookie登录
*/
protected function mweblogin($lx=0, $ismo=false)
{
$uid = m('login')->autologin((int)$this->get('adminid','0'), $this->get('token'));
if($uid==0){
$this->loginnot($ismo);
}else{
$this->initProject(); //登录成功
}
$this->adminid = $uid;
return $uid;
}
}