533 lines
15 KiB
PHP
533 lines
15 KiB
PHP
<?php
|
|
class wordClassModel extends Model
|
|
{
|
|
private $optionobj,$pathss;
|
|
|
|
public function initModel()
|
|
{
|
|
$this->optionobj = m('option');
|
|
}
|
|
|
|
//获取路径
|
|
public function getpath($id)
|
|
{
|
|
$this->pathss = array();
|
|
$this->getpaths($id);
|
|
return $this->pathss;
|
|
}
|
|
private function getpaths($id)
|
|
{
|
|
$rs = $this->getone($id);
|
|
if($rs){
|
|
$this->getpaths($rs['typeid']);
|
|
$this->pathss[] = $rs;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除文件
|
|
*/
|
|
public function delword($id)
|
|
{
|
|
if($this->rows('`typeid`='.$id.'')>0)return returnerror('有子目录不能删除');
|
|
$rs = $this->getone($id);
|
|
$fid = arrvalue($rs,'fileid','0');
|
|
$this->delete($id);
|
|
m('file')->delfile($fid); //同时删除文件
|
|
return returnsuccess();
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 创建文件夹,$cqid 分区ID, $typeid上级文件夹
|
|
*/
|
|
public function createfolder($name, $cqid, $typeid=0)
|
|
{
|
|
$arr['optid'] = $this->adminid;
|
|
$arr['optname'] = $this->adminname;
|
|
$arr['optdt'] = $this->rock->now;
|
|
$arr['name'] = $name;
|
|
$arr['cid'] = $cqid;
|
|
$arr['typeid'] = $typeid;
|
|
$arr['comid'] = m('admin')->getcompanyid();
|
|
$arr['type'] = 1; //说明是文件夹
|
|
$arr['id'] = $this->insert($arr);
|
|
return $arr;
|
|
}
|
|
|
|
/**
|
|
* 获取文档数据
|
|
* $lx=0文档中心,1所有共享,2我共享的
|
|
*/
|
|
public function getdata($lx=0)
|
|
{
|
|
//用来将原来的合并到现在的功能下
|
|
$uid = $this->adminid;
|
|
$fnum = 'folder'.$uid.'';
|
|
$moopt = m('option');
|
|
$onrs = $moopt->getone("`num`='$fnum'");
|
|
if($onrs && isempt($onrs['value'])){
|
|
$alltypeid = $moopt->getalldownid($onrs['id']);
|
|
$nto = $this->rows('cid=0 and `typeid` in('.$alltypeid.')');
|
|
//存在的 建自己的分区
|
|
if($nto>0){
|
|
$adfe['name'] = ''.$this->adminname.'的分区';
|
|
$adfe['recename'] = $this->adminname;
|
|
$adfe['receid'] = 'u'.$uid.'';
|
|
$adfe['guanname'] = $this->adminname;
|
|
$adfe['guanid'] = 'u'.$uid.'';
|
|
$adfe['optdt'] = $this->rock->now;
|
|
$adfe['uid'] = $uid;
|
|
$adfe['optname'] = $this->adminname;
|
|
$mycid = m('worc')->insert($adfe);//新的分区
|
|
$alltypeida = explode(',', $alltypeid);
|
|
//建文件夹
|
|
foreach($alltypeida as $ntyid){
|
|
if($this->rows('typeid='.$ntyid.'')==0)continue;
|
|
$fars = $moopt->getone($ntyid);
|
|
|
|
$wjar = $this->createfolder($fars['name'], $mycid);//创建文件夹
|
|
$ntypeid = $wjar['id'];
|
|
$this->update(array('cid' => $mycid,'typeid' => $ntypeid),'`typeid`='.$ntyid.'');//更新
|
|
}
|
|
}
|
|
$moopt->update("`value`='success'", $onrs['id']);
|
|
}
|
|
|
|
$cqids = c('check')->onlynumber($this->rock->post('cqids','-1'));
|
|
$cqid = (int)$this->rock->post('cqid','0'); //打开的分区
|
|
$typeid = (int)$this->rock->post('typeid','0'); //文件夹ID
|
|
$atype = $this->rock->post('atype');
|
|
if($atype=='shateall')$lx=1;
|
|
if($atype=='shatewfx')$lx=2;
|
|
|
|
$ismanage = 0;
|
|
$isup = 0;
|
|
$key = $this->rock->post('key');
|
|
$where = 'a.`cid` in('.$cqids.') ';
|
|
|
|
|
|
//管理中心
|
|
if($lx==0){
|
|
if($cqid>0){
|
|
$where.=' and a.`cid`='.$cqid.'';
|
|
$dbs = m('admin');
|
|
//判断是否有管理权限
|
|
$cqrs = m('worc')->getone($cqid);
|
|
if(!isempt($cqrs['guanid'])){
|
|
if($dbs->containjoin($cqrs['guanid'], $uid))$ismanage=1;
|
|
}else{
|
|
if($dbs->getmou('type', $uid)=='1')$ismanage=1;
|
|
}
|
|
|
|
if(isempt($cqrs['upuserid'])){
|
|
if($cqrs['uid']==$uid)$isup = 1;
|
|
}else{
|
|
if($dbs->containjoin($cqrs['upuserid'], $uid))$isup=1;
|
|
}
|
|
}
|
|
$where.=' and a.`typeid`='.$typeid.'';
|
|
if(!isempt($key))$where = 'a.`cid` in('.$cqids.') ';
|
|
}
|
|
|
|
//共享给我的
|
|
if($lx==1){
|
|
$where1 = m('admin')->getjoinstrs('a.`shateid`', $uid, 1);
|
|
//获取共享的目录ID
|
|
$frows = $this->db->getall('select a.id,a.cid from `[Q]word` a where a.`type`=1 '.$where1.'');
|
|
$alltyids= '-1';
|
|
foreach($frows as $k1=>$rs1){
|
|
$afflow = $this->getfolders($rs1['cid'], $rs1['id']);
|
|
$alltyids.=','.$rs1['id'].'';
|
|
foreach($afflow as $k2=>$rs2)$alltyids.=','.$rs2['id'].'';
|
|
}
|
|
$where = 'a.`type`=0 and ((1 '.$where1.') or (a.`typeid` in('.$alltyids.')))';
|
|
$where .= m('admin')->getcompanywhere(1,'a.');
|
|
}
|
|
|
|
//我共享的
|
|
if($lx==2){
|
|
$where = 'a.`type`=0 and a.`shateid` is not null and a.`optid`='.$uid.'';
|
|
$where .= m('admin')->getcompanywhere(1,'a.');
|
|
}
|
|
|
|
//关键词的搜索
|
|
if(!isempt($key)){
|
|
$where .=" and (b.`filename` like '%$key%' or a.`name` like '%$key%')";
|
|
}
|
|
|
|
$sarr = array(
|
|
'where' => $where,
|
|
'table' => '`[Q]word` a left join `[Q]file` b on a.`fileid`=b.`id`',
|
|
'fields'=> 'a.*,b.filename,a.sort,b.filesizecn,b.filenum,b.thumbplat,b.filesize,b.fileext,b.filepath,b.thumbpath,b.downci,b.`filepathout`',
|
|
'order' => 'a.`type` desc,a.`sort`,a.id desc'
|
|
);
|
|
|
|
$barr = $this->getlimit($sarr['where'], (int)$this->rock->post('page','1'), $sarr['fields'], $sarr['order'], (int)$this->rock->post('limit','15'), $sarr['table']);
|
|
|
|
$barr['totalCount'] = $barr['count'];
|
|
$rows = $barr['rows'];
|
|
$fobj = m('file');
|
|
|
|
//显示路径
|
|
foreach($rows as $k=>&$rs){
|
|
if($rs['type']=='1'){
|
|
$rs['fileext'] = 'folder';
|
|
$rs['optname'] = '';
|
|
$rs['optdt'] = '';
|
|
$rs['fileid'] = '';
|
|
$downci = $this->rows('`typeid`='.$rs['id'].'');
|
|
$rs['filesizecn'] = ($downci==0)?'':'<font color=#888888>有子目录</font>';
|
|
|
|
}else{
|
|
if(isempt($rs['name']))$rs['name'] = $rs['filename'];
|
|
$rs['thumbpath'] = $fobj->getthumbpath($rs); //缩略图的路径
|
|
|
|
$fpath = $rs['filepath'];
|
|
$wjstatus= 1;
|
|
if(substr($fpath,0,4)=='http'){
|
|
$wjstatus = 2;
|
|
}else{
|
|
$filepathout = $rs['filepathout'];
|
|
if(isempt($filepathout)){
|
|
if(!file_exists($fpath) && isempt($rs['filenum'])){
|
|
$wjstatus=0;
|
|
$rs['ishui']=1;
|
|
}
|
|
}else{
|
|
if($fobj->isimg($rs['fileext']))$rs['filepath'] = $filepathout;
|
|
$wjstatus = 2;
|
|
}
|
|
}
|
|
$rs['wjstatus'] = 2;
|
|
}
|
|
}
|
|
if($lx==0){
|
|
$barr['cprow']= m('worc')->getone($cqid);
|
|
$barr['patha']= $this->getpath($typeid);
|
|
}
|
|
$barr['rows'] = $rows;
|
|
$barr['ismanage'] = $ismanage; //是否有管理权限
|
|
$barr['isup'] = $isup; //是否可上传
|
|
$barr['officebj'] = getconfig('officebj');
|
|
return $barr;
|
|
}
|
|
|
|
/**
|
|
* 保存文件
|
|
*/
|
|
public function savefile()
|
|
{
|
|
$cid = (int)$this->rock->post('cqid',0);
|
|
$sid = $this->rock->post('sid');
|
|
$typeid = (int)$this->rock->post('typeid','0');
|
|
$sadid = explode(',', $sid);
|
|
|
|
$arr['optid'] = $this->adminid;
|
|
$arr['optname'] = $this->adminname;
|
|
$arr['optdt'] = $this->rock->now;
|
|
$arr['cid'] = $cid;
|
|
$arr['comid'] = m('admin')->getcompanyid();
|
|
$arr['typeid'] = $typeid;
|
|
$file = m('file');
|
|
$id = 0;
|
|
foreach($sadid as $fid){
|
|
$arr['fileid'] = $fid;
|
|
$id = $this->insert($arr);
|
|
$file->addfile($fid, 'word', $id, 'word');
|
|
}
|
|
$names = '';
|
|
$frows = $file->getall('`id` in('.$sid.')');
|
|
$zongs = count($frows);
|
|
foreach($frows as $k=>$rs){
|
|
if($k<3)$names.=','.$rs['filename'].'';
|
|
}
|
|
|
|
//发送推送通知
|
|
$cprs = m('worc')->getone($cid);
|
|
$fors = $this->getone($typeid);
|
|
if($cprs && $names!=''){
|
|
$names= substr($names, 1);
|
|
$receid= $cprs['receid'];
|
|
if(isempt($receid))$receid = 'u0';
|
|
if(!isempt(arrvalue($fors,'shateid')))$receid.=','.$fors['shateid'].''; //同时发给共享的
|
|
|
|
$cont = "{$this->adminname}在“{$cprs['name']}”上传了{$zongs}个文件“{$names}”";
|
|
$flow = m('flow')->initflow('word');
|
|
if(arrvalue($flow->moders,'pctx')=='1')$flow->push($receid,'文档', $cont, ''.$this->adminname.'上传了文件',0, array(
|
|
'wxurl' => $flow->getwxurl(),
|
|
'id' => $id
|
|
));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取分区文件夹
|
|
*/
|
|
public function getworcfolder()
|
|
{
|
|
$barr = m('worc')->getmywroc();
|
|
$ids = $barr['ids'];
|
|
$rows = $barr['rows'];
|
|
|
|
|
|
$arr = array();
|
|
foreach($rows as $k=>$rs){
|
|
if($rs['ismanage']==0)continue;
|
|
$cqid = $rs['id']; //区id
|
|
$arr[] = array(
|
|
'cqid' => $cqid,
|
|
'typeid'=> 0,
|
|
'iconsimg'=> 'images/wjj.png',
|
|
'iconswidth'=> '24',
|
|
'name' => $rs['name'],
|
|
);
|
|
|
|
$rowa = $this->getfolders($rs['id']);
|
|
foreach($rowa as $k1=>$rs1){
|
|
$rs1['cqid'] = $cqid;
|
|
$rs1['iconsimg'] = 'images/folder.png';
|
|
$arr[] = $rs1;
|
|
}
|
|
}
|
|
return $arr;
|
|
}
|
|
|
|
//获取文件夹,获取对应子目录
|
|
private $getfoldersa;
|
|
public function getfolders($cid, $typeid=0)
|
|
{
|
|
$rows = $this->getall('`cid`='.$cid.' and `type`=1','`id`,`name`,`typeid`','`sort`');
|
|
$this->getfoldersa = array();
|
|
$this->getfolderss($rows, $typeid,1);
|
|
return $this->getfoldersa;
|
|
}
|
|
private function getfolderss($rows, $typeid, $lev=1)
|
|
{
|
|
foreach($rows as $k=>$rs){
|
|
if($rs['typeid']==$typeid){
|
|
$rs['padding'] = 24*$lev;
|
|
$rs['typeid'] = $rs['id'];
|
|
$this->getfoldersa[] = $rs;
|
|
$this->getfolderss($rows, $rs['id'], $lev+1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 移动
|
|
*/
|
|
public function movefile()
|
|
{
|
|
$cqid = (int)$this->rock->post('cqid','0');
|
|
$typeid = (int)$this->rock->post('typeid','0');//文件夹
|
|
$ids = $this->rock->post('ids','0');//要移动文件
|
|
if($typeid>0){
|
|
//判断是否在自己文件夹下
|
|
$foldpath = $this->getpath($typeid);
|
|
$foldar = array();
|
|
foreach($foldpath as $k1=>$rs1)$foldar[] = $rs1['id'];
|
|
$idsa = explode(',', $ids);
|
|
foreach($idsa as $ids1){
|
|
if(in_array($ids1, $foldar))return returnerror('['.$ids1.']不能移动到自己的子目录下');
|
|
}
|
|
}
|
|
|
|
$this->update('`cid`='.$cqid.',`typeid`='.$typeid.'', "`id` in($ids)");
|
|
|
|
//获取所有下级需要更新分区Id
|
|
$this->moveaddid = '0';
|
|
$this->getmovedanow($ids);
|
|
if($this->moveaddid!='0')$this->update('`cid`='.$cqid.'', '`id` in('.$this->moveaddid.')');
|
|
|
|
return returnsuccess();
|
|
}
|
|
private function getmovedanow($ids)
|
|
{
|
|
$addid = '';
|
|
$rows = $this->getall('`typeid` in('.$ids.')');
|
|
foreach($rows as $k=>$rs){
|
|
$addid.=','.$rs['id'].'';
|
|
}
|
|
if($addid!=''){
|
|
$addid = substr($addid,1);
|
|
$this->moveaddid.=','.$addid.'';
|
|
$this->getmovedanow($addid);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 共享
|
|
*/
|
|
public function sharefile()
|
|
{
|
|
$ids = $this->rock->post('ids','0');
|
|
$arr['shateid'] = $this->rock->post('sid');
|
|
$arr['shate'] = $this->rock->post('sna');
|
|
$this->update($arr, "`id` in($ids)");
|
|
|
|
|
|
//发通知给对应人说共享了
|
|
if(!isempt($arr['shateid'])){
|
|
$names= '';
|
|
$rows = $this->db->getall('select a.name,b.filename,a.id from `[Q]word` a left join `[Q]file` b on a.fileid=b.id where a.`id` in('.$ids.')');
|
|
$id = 0;
|
|
foreach($rows as $k=>$rs){
|
|
$nas = $rs['name'];
|
|
if(isempt($nas))$nas = $rs['filename'];
|
|
if(!isempt($nas))$names.=','.$nas.'';
|
|
if($id==0)$id = $rs['id'];
|
|
}
|
|
if($names!=''){
|
|
$names= substr($names, 1);
|
|
$cont = "{$this->adminname}共享了文件“{$names}”";
|
|
$flow = m('flow')->initflow('word');
|
|
$flow->push($arr['shateid'],'文档', $cont, ''.$this->adminname.'发来共享文件',0, array(
|
|
'wxurl' => $flow->getwxurl(),
|
|
'id' => $id
|
|
));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//----------------以下是旧的,后续会删除-------------
|
|
|
|
/**
|
|
* 读取对应顶级ID
|
|
*/
|
|
public function getfolderid($uid, $isdept=false)
|
|
{
|
|
$num = "folder".$uid."";
|
|
$name= ''.$this->adminname.'文件夹目录';
|
|
if($isdept){
|
|
$drs = m('dept')->getudept($uid);
|
|
$num = 'deptfolder'.$drs['nums'].'';
|
|
$name= ''.$drs['name'].'文件夹目录';
|
|
}
|
|
$id = $this->optionobj->getnumtoid($num, $name, false);
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* 对应对应文件目录
|
|
*/
|
|
public function getfoldrows($uid, $isdept=false)
|
|
{
|
|
$pid = $this->getfolderid($uid, $isdept);
|
|
$rows = $this->optionobj->gettreedata($pid);
|
|
return $rows;
|
|
}
|
|
|
|
/**
|
|
* 读取所有目录
|
|
*/
|
|
private $allfolder = array();
|
|
public function getallfolder($idss='',$level=0)
|
|
{
|
|
$where = "`num` like 'folder%' or `num` like 'deptfolder%'";
|
|
if(!isempt($idss))$where = "`pid` in($idss)";
|
|
$rows = $this->db->getall("SELECT * FROM `[Q]option` where $where");
|
|
$ids = '';
|
|
foreach($rows as $k=>$rs){
|
|
$ids.=','.$rs['id'].'';
|
|
$rs['level'] = $level;
|
|
if(!isempt($idss))$this->allfolder[] = $rs;
|
|
}
|
|
if($ids!=''){
|
|
$this->getallfolder(substr($ids, 1), $level+1);
|
|
}
|
|
return $this->allfolder;
|
|
}
|
|
|
|
/**
|
|
* 获取分享给我的目录(太复杂了,无法进行了)
|
|
*/
|
|
public function getshatefolder($uid)
|
|
{
|
|
$allfolder = $this->getallfolder();
|
|
$urs = $this->db->getone('[Q]admin','`id`='.$uid.'','id,deptpath');
|
|
$uarr[] = 'u'.$uid.'';
|
|
$deptpath = arrvalue($urs, 'deptpath');
|
|
if(!isempt($deptpath)){
|
|
$depa = explode(',', str_replace(array('[',']'), array('',''), $deptpath));
|
|
foreach($depa as $depas){
|
|
$uarr[] = 'd'.$depas.'';
|
|
}
|
|
}
|
|
$rows = $this->getshatefolders($allfolder, 1, $uarr, 0);
|
|
return $rows;
|
|
}
|
|
private function getshatefolders($allfolder, $level, $uarr, $pid=0)
|
|
{
|
|
$rarr = array();
|
|
foreach($allfolder as $k=>$rs){
|
|
$receid = $rs['receid'];
|
|
if($level==1 && $rs['level']!=$level)continue;
|
|
if($level>1 && $pid!=$rs['pid'])continue;
|
|
$bo = false;
|
|
if(!isempt($receid)){
|
|
$receida = explode(',', $receid);
|
|
foreach($uarr as $uarrs){
|
|
if(in_array($uarrs, $receida))$bo=true;
|
|
}
|
|
}
|
|
|
|
$rs['children'] = $this->getshatefolders($allfolder, $level+1, $uarr, $rs['id']);
|
|
$rarr[] = $rs;
|
|
}
|
|
return $rarr;
|
|
}
|
|
|
|
/**
|
|
* 模版替换
|
|
*/
|
|
public function replaceWord($fid, $arr)
|
|
{
|
|
$word = c('PHPWord');
|
|
if($fid==0 || !$word->isbool())return;
|
|
$frs = m('file')->getone($fid);
|
|
if($frs && $frs['fileext']=='docx'){
|
|
$filepath = $frs['filepath'];
|
|
if(contain($filepath,'rocktpl')){
|
|
$tplid = str_replace('.docx','',substr($filepath, strripos($filepath, '_')+1));
|
|
$tplrs = m('wordxie')->getone('`fileid`='.$tplid.'');
|
|
$npath = ''.UPDIR.'/'.date('Y-m').'/'.date('d_His').''.rand(10,99).'.docx';
|
|
if(!$tplrs)return;
|
|
|
|
$this->rock->createdir($npath);
|
|
$tplvar = $tplrs['tplvar'];
|
|
$tihad = array();
|
|
if(isempt($tplvar)){
|
|
$tihad = $arr;
|
|
}else{
|
|
$tpla = explode(',', $tplvar);
|
|
foreach($tpla as $k)$tihad[$k] = arrvalue($arr, $k);
|
|
}
|
|
|
|
if($tihad){
|
|
$barr = $word->replaceWord($filepath, $tihad, $npath);
|
|
if($barr['success']){
|
|
$nnpath = $barr['data'];
|
|
if(file_exists($nnpath)){
|
|
$filesize = filesize($nnpath);
|
|
$uarr['filepathout']= '';
|
|
$uarr['pdfpath'] = '';
|
|
$uarr['filepath'] = $nnpath;
|
|
$uarr['filesize'] = $filesize;
|
|
$uarr['filesizecn'] = $this->rock->formatsize($filesize);
|
|
m('file')->update($uarr,$fid);
|
|
@unlink($filepath);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |