<?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
				));
			}
		}
	}
	
	
	
	
	//----------------以下是旧的，后续会删除-------------
	
	/**
	*	读取对应顶级ＩＤ
	*/
	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);
						}
					}
				}
			}
		}
	}
}