<?php

/**
 * @author darkredz
 */

class ExpandController extends DooController {
	
	public $staff;
	
	public $nature=array('1'=>'设计',
						'2'=>'造价管理',
						'3'=>'业主',
						'4'=>'交通局',
						'5'=>'公路局',
						'6'=>'审计',
						'7'=>'财政',
						'8'=>'审核',
						'9'=>'施工',
						'10'=>'咨询',
						'11'=>'招标代理',
						'12'=>'监理',
						'13'=>'学校',
						'14'=>'个人',
						'15'=>'合作伙伴',
						);
	
	public $tooltip=array('1'=>array('L','点击筛选标签'),
						'2'=>array('M','点击筛选标签'),
						'3'=>array('N','点击筛选标签'),
						'4'=>array('O','点击筛选标签'),
						'5'=>array('P','点击筛选标签'),
						'6'=>array('Q','点击筛选标签'),
						'7'=>array('R','点击筛选标签'),
	);					

	public $webPath="http://cld.smartcost.com.cn/upload/emailAnnex/";
	
	function __construct() {
		//include './protected/config/common.conf.php';
		//include $config['BASE_PATH'].'diagnostic/debug.php';
		if(isset($_COOKIE["staff"])){
			if(!empty($_COOKIE["staff"])){
				Doo::loadModel ( 'staff' );
				$staff = new staff ();
				$this->staff=$staff->getUserByIdList($_COOKIE["staff"]);
				
				
				return "/";
			}
		}
		
		Doo::loadCore ( 'uri/DooUriRouter' );
		$router = new DooUriRouter ();
		$routeRs = $router->execute ( Doo::app ()->route, Doo::conf ()->SUBFOLDER );
			
		if($routeRs['1']!="login"){
			header ( 'Content-Type:text/html;charset=utf-8' );
			@header ( "Location: /login"  );
		}
	}
	
	function sms(){
		
		Doo::loadModel('tag');
		$tag=new tag();
		Doo::loadModel('district');
		$district= new district();
		
		$tagList=$tag->getAllBySid($this->staff[0]['sid']);
		$districtList=$district->get_lv(1);
		
		$data['tagList']=$tagList;
		$data['districtList']=$districtList;
		$data['memu']="eMailTask";
		$data['staff']=$this->staff;
		$data['mailMemu']='sms';
		
		$this->render ( "/sms_create", $data );
	}
	
	function createSms(){
		$title=$this->get_args('title')?$this->get_args('title'):"";
		$content=isset($_POST['content'])?$_POST['content']:"";
		$tagId=$this->get_args('tagId')?$this->get_args('tagId'):array();
		
		$did=$this->get_args('did')?$this->get_args('did'):"";
		$stype=$this->get_args('stype')?$this->get_args('stype'):"";
		$kind=$this->get_args('kind')?$this->get_args('kind'):1;
		
		if (!empty($content)&&(!empty($tagId)||!empty($did))){
			Doo::loadModel('sms');
			$sms=new sms();
			Doo::loadModel('tag_client');
			$tagClient=new tag_client();
			Doo::loadModel('client');
			$client=new client();
			
			$tagCondition="";$tagArray=array();
			foreach ($tagId as $value){
				array_push($tagArray, " tag like '%".$value."%' ");
			}
			if(!empty($tagArray))
				$tagCondition=' and ('.implode(" or ", $tagArray).')';
			$clientList=$tagClient->find(array('select'=>'client','where'=>'sid='.$this->staff[0]['sid'].$tagCondition,'asArray'=>true));
			
			$clientArray=array();
			foreach ($clientList as $value){
				array_push($clientArray, $value['client']);
			}
			$clientEmailList=array();
			if (!empty($clientArray))
				$clientEmailList=$client->find(array('select'=>'nicename as clientname,companyname,telephone','where'=>'cid in ('.implode(",", $clientArray).')','asArray'=>true));
			
			if ($stype==2)	
				$clientEmailList=$client->find(array('select'=>'nicename as clientname,companyname,telephone','where'=>'district like "'.$did.',%" ','asArray'=>true));
			
			$list=array();$illegal=array();	
			foreach ($clientEmailList as $value){	
				if (preg_match("/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/",$value['telephone']))
					array_push($list, $value);
				else
					array_push($illegal, $value);
			}
			
			if ($stype==1){
				$sms->tag=implode(",", $tagId);
				$sms->districtId=0;
			}
			if ($stype==2){
				$sms->tag="";
				$sms->districtId=$did;
			}
			
			$sms->date=date("Y-m-d");
			$sms->content=$content;//base64_encode(gzcompress(json_encode($emailArray)));
			$sms->title=$title;
			$sms->client=base64_encode(gzcompress(json_encode($list)));
			$sms->illegal=json_encode(array_slice($illegal,0,100));
			$sms->signature=1;
			$sms->status=1;
			$sms->kind=$kind;
			$sms->date=date("Y-m-d");
			//$sms->tag=implode(",", $tagId);
			//$sms->districtId=$did;
			$sms->category=$this->staff[0]['category'];
			$sms->staffId=$this->staff[0]['sid'];
			$sms->staffName=$this->staff[0]['username'];
			$sms->insert();
			return '/smsList';
		}
		return '/createSms';
	}
	
	function editSmsView(){
		$sid=isset($this->params['sid'])?$this->params['sid']:0;
		//$sid=$this->get_args('sid')?$this->get_args('sid'):0;
		
		Doo::loadModel('tag');
		$tag=new tag();
		Doo::loadModel('district');
		$district= new district();
		
		$smsInfo=array();
		if(!empty($sid)){
			Doo::loadModel('sms');
			$sms=new sms();
			$smsInfo=$sms->getOne(array('where'=>'sid = '.$sid,'asArray'=>true));
			$smsInfo['tagList']=explode(",", $smsInfo['tag']);
		}else 
			return "/smsList";
		
		$tagList=$tag->getAllBySid($this->staff[0]['sid']);
		$districtList=$district->get_lv(1);
		
		$tagHtml='';
		foreach ($tagList as $key=>$value){
			$tagHtml.='<label><span data-original-title="'.$value['name'].'" data-toggle="ctooltip" data-placement="right" class="contactsTag tagCol-0'.$value['colorid'].'">
			  			<input type="checkbox" name="tagId[]"';
			foreach ($smsInfo['tagList'] as $k=>$v){
				if ($value['tid']==$v){
					$tagHtml.=' checked ';break;
				}
			}		
			$tagHtml.=' value="'.$value['tid'].'"></span></label>';
		}
		
		$districtHtml='';
		foreach ($districtList as $key=>$value){
			$districtHtml.='<option value="'.$value['id'].'"';
			if($value['id']==$smsInfo['districtId'])
				$districtHtml.='selected';
			
			$districtHtml.='>'.$value['name'].'</option>';
		}
		
		$data['districtHtml']=$districtHtml;
		$data['tagHtml']=$tagHtml;
		$data['smsInfo']=$smsInfo;
		$data['tagList']=$tagList;
		$data['districtList']=$districtList;
		$data['memu']="eMailTask";
		$data['staff']=$this->staff;
		$data['mailMemu']='smsList';
		
		$this->render ( "/sms_edit", $data );
	}
	
	function editSms(){
		$sid=$this->get_args('sid')?$this->get_args('sid'):0;
		$title=$this->get_args('title')?$this->get_args('title'):"";
		$content=isset($_POST['content'])?$_POST['content']:"";
		$tagId=$this->get_args('tagId')?$this->get_args('tagId'):array();
		
		$did=$this->get_args('did')?$this->get_args('did'):"";
		$stype=$this->get_args('stype')?$this->get_args('stype'):"";
		$kind=$this->get_args('kind')?$this->get_args('kind'):1;
		
		if (!empty($content)&&!empty($sid)&&(!empty($tagId)||!empty($did))){
			Doo::loadModel('sms');
			$sms=new sms();
			Doo::loadModel('tag_client');
			$tagClient=new tag_client();
			Doo::loadModel('client');
			$client=new client();
			
			$tagCondition="";$tagArray=array();
			foreach ($tagId as $value){
				array_push($tagArray, " tag like '%".$value."%' ");
			}
			if(!empty($tagArray))
				$tagCondition=' and ('.implode(" or ", $tagArray).')';
			$clientList=$tagClient->find(array('select'=>'client','where'=>'sid='.$this->staff[0]['sid'].$tagCondition,'asArray'=>true));
			
			$clientArray=array();
			foreach ($clientList as $value){
				array_push($clientArray, $value['client']);
			}
			$clientEmailList=array();
			if (!empty($clientArray))
				$clientEmailList=$client->find(array('select'=>'nicename as clientname,companyname,telephone','where'=>'cid in ('.implode(",", $clientArray).')','asArray'=>true));
			
			if ($stype==2)	
				$clientEmailList=$client->find(array('select'=>'nicename as clientname,companyname,telephone','where'=>'district like "'.$did.',%" ','asArray'=>true));
			
			$list=array();$illegal=array();	
			foreach ($clientEmailList as $value){	
				if (preg_match("/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/",$value['telephone'])){
					array_push($list, $value);
				}else{
					array_push($illegal, $value);
				}
			}
			
			$sms->date=date("Y-m-d");
			$sms->content=$content;//base64_encode(gzcompress(json_encode($emailArray)));
			$sms->title=$title;
			$sms->client=base64_encode(gzcompress(json_encode($list)));
			$sms->illegal=json_encode(array_slice($illegal,0,100));
			$sms->signature=1;
			$sms->status=1;
			$sms->kind=$kind;
			$sms->date=date("Y-m-d");
			
			if ($stype==1){
				$sms->tag=implode(",", $tagId);
				$sms->districtId=0;
			}
			if ($stype==2){
				$sms->tag="";
				$sms->districtId=$did;
			}
			
			$sms->staffId=$this->staff[0]['sid'];
			$sms->staffName=$this->staff[0]['username'];
			$sms->update(array('where'=>'sid='.$sid,'asArray'=>true));
			return '/smsList';
		}
		return '/smsList';
	}
		
	function smsList(){
		Doo::loadModel('sms');
		$sms=new sms();
		Doo::loadModel('tag');
		$tag=new tag();
		
		$mailList=$sms->find(array('where'=>'staffId='.$this->staff[0]['sid'],'asc'=>'status','asArray'=>true));
		
		foreach ($mailList as $key=>$value){
			$mailList[$key]['clientName']=json_decode(gzuncompress(base64_decode($value['client'])),true);
			$mailList[$key]['illegalEmail']=json_decode($value['illegal'],true);
			$mailList[$key]['clientCount']=count($mailList[$key]['client']);
			$mailList[$key]['tag']=array();
			if($value['kind']==1)
				$mailList[$key]['kindName']='营销';
			else 
				$mailList[$key]['kindName']='通知';
			if (!empty($value['tag']))
				$mailList[$key]['tag']=$tag->find(array('where'=>'tid in ( '.$value['tag'].') ','asArray'=>true));
		}
		
		$data['mailList']=$mailList;
		$data['memu']="eMailTask";
		$data['staff']=$this->staff;
		$data['mailMemu']='smsList';
		
		$this->render ( "/sms_list", $data );
	}
	
	function smsCenter(){
		$year=$this->get_args('year')?$this->get_args('year'):date("Y");
		$month=$this->get_args('month')?$this->get_args('month'):0;
		
		Doo::loadModel('sms');
		$sms=new sms();
		Doo::loadModel('tag');
		$tag=new tag();
		
		$dateCondition="Year(date) =".$year;	
		if(!empty($month))
			$dateCondition="Year(date) =".$year." and Month(date) = ".$month;
		$mailList=$sms->find(array('where'=>$dateCondition,'asc'=>'status','asArray'=>true));
		
		foreach ($mailList as $key=>$value){
			$mailList[$key]['clientName']=json_decode(gzuncompress(base64_decode($value['client'])),true);
			$mailList[$key]['illegalEmail']=json_decode($value['illegal'],true);
			$mailList[$key]['clientCount']=count($mailList[$key]['client']);
			if($value['kind']==1)
				$mailList[$key]['kindName']='营销';
			else 
				$mailList[$key]['kindName']='通知';
			$mailList[$key]['tag']=array();
			if (!empty($value['tag']))
				$mailList[$key]['tag']=$tag->find(array('where'=>'tid in ( '.$value['tag'].') ','asArray'=>true));
		}
		
		$dateHtml="";$now=date("Y");
		for ($YEARD=2014;$YEARD<=2050;$YEARD++){
			if ($YEARD<=$now){
				$dateHtml.='<option ';
				if ($year==$YEARD )
					$dateHtml.=' selected ';
				$dateHtml.=' value="'.$YEARD.'">'.$YEARD.'</option>';
			}
		}
		$monthHtml='<option value="0">所有月份</option>';
		for ($i=1;$i<=12;$i++){
			$monthHtml.='<option ';
			if ($i==$month )
				$monthHtml.=' selected ';
			$monthHtml.=' value="'.$i.'">'.$i.'</option>';
		}
		
		$data['monthHtml']=$monthHtml;
		$data['dateHtml']=$dateHtml;
		$data['mailList']=$mailList;
		$data['memu']="eMailTask";
		$data['staff']=$this->staff;
		$data['mailMemu']='smsCenter';
		
		$this->render ( "/sms_center", $data );
	}
	
	function authOrize(){
		$kind=isset($this->params['kind'])?$this->params['kind']:0;
		$sid=isset($this->params['sid'])?$this->params['sid']:0;
		if (!empty($kind)&&!empty($sid)){
			Doo::loadModel('sms');
			$sms=new sms();
			if ($kind==1)
				$sms->status=3;
			else 
				$sms->status=2;
			
			$sms->mark=$this->staff[0]['username']."已同意";
			$sms->update(array('where'=>'sid='.$sid,'asArray'=>true));
		}
		return '/smsCenter';
	}
	
	function delete(){
		$sid=isset($this->params['sid'])?$this->params['sid']:0;
		if (!empty($sid)){
			Doo::loadModel('sms');
			$sms=new sms();
			$sms->delete(array('where'=>'sid='.$sid));
		}
		return '/smsList';
	}

	function sendSms(){
		$sid=isset($this->params['sid'])?$this->params['sid']:0;
		
		Doo::loadModel('sms');
		$sms=new sms();
		
		if(!empty($sid)){
			$smsInfo=$sms->getOne(array('where'=>'sid='.$sid,'asArray'=>true));
			if(!empty($smsInfo)&&$smsInfo['kind']==2&&$smsInfo['status']==2){
				$smsPhone=json_decode(gzuncompress(base64_decode($smsInfo['client'])),true);
				
				$telephoneMun=array();$clientName=array();
				foreach ($smsPhone as $key=>$value){
					array_push($telephoneMun, $value['telephone']);
					array_push($clientName, $value['clientname']);
				}
				$telephoneMun=implode(",", $telephoneMun);
				$clientName=implode("{|}", $clientName);
				
				$url='http://smsapi.c123.cn/OpenPlatform/OpenApi?';
				$ac='1001@501046820001';
				$authkey = 'DD59699A324759EACB0ECECE564D1256';
				$csid='4496';  //签名编号 
				$cgid='2733'; //通道组编号
				
				$t=date('YmdGis',strtotime(" +10 seconds ")); //发送时间
				$c = '{p1}您好！'.$smsInfo['content'];
				$m= $telephoneMun;	//号码
				$p1=$clientName;
				
				$data = array('action'=>'sendParam',  //发送类型 ，可以有sendOnce短信发送，sendBatch一对一发送，sendParam	动态参数短信接口
							  'ac'=>$ac,'authkey'=>$authkey,'cgid'=>$cgid,        
							  'm'=>$m,		     //号码
				  			  'c'=>$c,		    //如果页面是gbk编码，则转成utf-8编码，如果是页面是utf-8编码，则不需要转码,内容用{|}，如测试一{|}测试二
							  'csid'=>$csid,            //签名编号 ，可以为空，为空时使用系统默认的签名编号
							  't'=>$t,                      //定时发送，为空时表示立即发送,yyyyMMddHHmmss 如:20130721182038
							  'p1'=>$p1  
						);
				
				$re= $this->postSMS($url,$data);
				preg_match_all('/result="(.*?)"/',$re,$res);
				if(trim($res[1][0]) == '1' ){
					$sms->status=3;
					$sms->errorInfo="";
					$sms->update(array('where'=>'sid='.$sid));
				}else{
					switch(trim($res[1][0])){
					case  0: $sms->errorInfo="帐户格式不正确(正确的格式为:员工编号@企业编号)";break; 
					case  -1: $sms->errorInfo="服务器拒绝(速度过快、限时或绑定IP不对等)如遇速度过快可延时再发";break;
					case  -2: $sms->errorInfo=" 密钥不正确";break;
					case  -3: $sms->errorInfo="密钥已锁定";break;
					case  -4: $sms->errorInfo="参数不正确(内容和号码不能为空，手机号码数过多，发送时间错误等)";break;
					case  -5: $sms->errorInfo="无此帐户";break;
					case  -6: $sms->errorInfo="帐户已锁定或已过期";break;
					case  -7: $sms->errorInfo="帐户未开启接口发送";break;
					case  -8: $sms->errorInfo="不可使用该通道组";break;
					case  -9: $sms->errorInfo="帐户余额不足";break;
					case  -10: $sms->errorInfo="内部错误";break;
					case  -11: $sms->errorInfo="扣费失败";break;
					default:break;
					}
					$sms->update(array('where'=>'sid='.$sid));
				}
			}
		}
		return "/smsList";
	}  
	
	function downLoadSms(){
		//include Doo::conf()->BASE_PATH.'diagnostic/debug.php';
		$sid=isset($this->params['sid'])?$this->params['sid']:0;
		Doo::loadModel('sms');
		$sms=new sms();
		if(!empty($sid)){
			$smsInfo=$sms->getOne(array('where'=>'sid='.$sid,'asArray'=>true));
			$smsPhone=json_decode(gzuncompress(base64_decode($smsInfo['client'])),true);
			$fileContent="";
			$filepath=DOO::conf()->SITE_PATH."upload/sms/telephone.txt";
			foreach ($smsPhone as $key=>$value){
				$fileContent.=$value['telephone'].','.$value['clientname'].'您好！'.$smsInfo['content'].PHP_EOL;
			}
			file_put_contents($filepath, $fileContent);
			
			header('Content-Description: File Transfer');
			header('Content-Type: application/octet-stream');
			header('Content-Disposition: attachment; filename='.basename($filepath));
			header('Content-Transfer-Encoding: binary');
			header('Expires: 0');
			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
			header('Pragma: public');
			header('Content-Length: ' . filesize($filepath));
			readfile($filepath);
		}
	}
	
	private function postSMS($url,$data=''){
		$row = parse_url($url);
		$host = $row['host'];
		$port = $row['port'] ? $row['port']:80;
		$file = $row['path'];
		while (list($k,$v) = each($data)) {
			//$post .= rawurlencode($k)."=".rawurlencode($v)."&";	//转URL标准码
			$post .= $k."=".$v."&";
		}
		$post = substr( $post , 0 , -1 );
		$len = strlen($post);
		$fp = @fsockopen( $host ,$port, $errno, $errstr, 10);
		if (!$fp) {
			return "$errstr ($errno)\n";
		} else {
			$receive = '';
			$out = "POST $file HTTP/1.0\r\n";
			$out .= "Host: $host\r\n";
			$out .= "Content-type: application/x-www-form-urlencoded\r\n";
			$out .= "Connection: Close\r\n";
			$out .= "Content-Length: $len\r\n\r\n";
			$out .= $post;		
			fwrite($fp, $out);
			while (!feof($fp)) {
				$receive .= fgets($fp, 128);
			}
			fclose($fp);
			$receive = explode("\r\n\r\n",$receive);
			unset($receive[0]);
			return implode("",$receive);
		}
	}
	
	
	private function getReceiptCount(){
		
		$status=2;
		$year=date('Y');
		
		Doo::loadModel('receipt');
		$receipt=new receipt();
		Doo::loadModel('verify');
		$verify=new verify();
		
		//user verify ID
		$vidList=array();
		$verifyDetail=$verify->find(array('where'=>'staff like "%\"'.$this->staff[0]['sid'].'\"%"','asArray'=>true));
		foreach ($verifyDetail as $key=>$value){
			array_push($vidList, $value['vid']);
		}
		$vid=implode(",", $vidList);
		if(empty($verifyDetail))
			$vid=0;
		
		$dateCondition=" and Year(date) =".$year;	
		$approvalCondition=' and verifyStaff not like "%\"'.$this->staff[0]['sid'].'\":{%" ';
			
		$receiptList=$receipt->find(array('where'=>'verify in('.$vid.') and status='.$status.$dateCondition.$approvalCondition,'desc'=>'rid','asArray'=>true));
		
		return count($receiptList);
	}
	
	private function _GetFileEXT($filename) {
		$pics = explode ( '.', $filename );
		$num = count ( $pics );
		return $pics [$num - 1];
	}

	/**
	 * 获取get或者POST值
	 * @param string $name 属性名称
	 * @return fixed 值
	 */
	private function get_args($name) {
		if (isset ( $_GET [$name] )) {
			if (is_array ( $_GET [$name] ))
				return $_GET [$name];
			else {
				return addslashes ( $_GET [$name] );
		//return  $_GET [$name] ;
			}
		
		} elseif (isset ( $_POST [$name] )) {
			if (is_array ( $_POST [$name] ))
				return $_POST [$name];
			else {
				return addslashes ( $_POST [$name] );
		//return $_POST [$name];
			}
		} else 
			return false;
	}
}

?>