private function getPhoneList($request, $response)
 {/*{{{*/
     $diseaseIds_shuffle = self::$diseaseIds;
     shuffle($diseaseIds_shuffle);
     list($directDoctorList, $directSatisfactions) = PaymentClient::getInstance()->getLatestPhoneServiceDoctorAndSatisfactionListByDiseaseId(array_pop($diseaseIds_shuffle), 3); 
     if($request->searchType == CmsTagType::HOSPITAL)
     {
         $phoneDoctorIds = DAL::get()->queryDoctorIdsByHospital('DoctorOutLine', $request->searchParam, 3);
         if (false == empty($phoneDoctorIds))
         {
             $directDoctorList = DAL::get()->find('Doctor', $phoneDoctorIds);
             $directSatisfactions = PaymentClient::getInstance()->getDoctorSatisfactionList($phoneDoctorIds);
         }
     }
     if($request->searchType == CmsTagType::FACULTY)
     {
         $phoneDoctorIds = DAL::get()->queryDoctorIdsByHospitalFaculty('DoctorOutLine', $request->searchParam, 3);
         if (false == empty($phoneDoctorIds))
         {
             $directDoctorList = DAL::get()->find('Doctor', $phoneDoctorIds);
             $directSatisfactions = PaymentClient::getInstance()->getDoctorSatisfactionList($phoneDoctorIds);
         }
     }
     $response->statistics = SpaceClient::getInstance()->getStatistics();
     $response->directDoctorList = $directDoctorList;
     $response->directSatisfactions = $directSatisfactions;
 }/*}}}*/
    public function createSitemap()
    {/*{{{*/
        $content = '';
        $header = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">'."\n";
		$footer = '</urlset>';
        $hospitalUrlList = DAL::get()->queryAllHospitalUrl4Sitemap('hospital'); 
        $content = $this->getData4Sitemap($hospitalUrlList);
        $diseaseUrlList = DAL::get()->queryAllDiseaseUrl4Sitemap('disease');
        $content .= $this->getData4Sitemap($diseaseUrlList);
        $facultyUrlList = DAL::get()->queryAllFacultyUrl4Sitemap('faculty');
        $content .= $this->getData4Sitemap($facultyUrlList);
        $zixunUrlList = $this->getZixunUrl();
        $content .= $this->getData4Sitemap($zixunUrlList);
        $bookingHospitalUrlList = SpaceClient::getInstance()->getBookingHospitalUrl4Sitemap('plussignchannel');
        $content .= $this->getData4Sitemap($bookingHospitalUrlList);
        $data = $header.$content.$footer;
        $filePath = dirname(__FILE__).'/../root/sitemap/';
        $fileName = 'wwwfront.xml';
        $file = $filePath.$fileName;
        $fp = fopen($file,'w');
        fwrite($fp, $data);
        fclose($fp);
    }/*}}}*/
    public function updateDoctorSitemap()
    {/*{{{*/
		$curPage = $_SERVER["argv"][1]; //开始页
		echo date("Y-m-d H:i:s")." Current page: {$curPage} start... \n";
        $indexFilePath = dirname(__FILE__).'/../../wwwfront/root/sitemap/';
        $indexFileName = $curPage.'.xml';
		$indexFile = $indexFilePath.$indexFileName;
        if(false == isset($_SERVER["argv"][2])) //若只有一个医生id 
        {
            $spaces = DAL::get()->find('space',array($curPage));
        } 
        else 
        {
            $pageSize = $_SERVER["argv"][2]; //每一页大小
            $spaces = SpaceClient::getInstance()->getConfirmedSpaces($curPage,$pageSize);
        }
        if(false == count($spaces))
        {
            echo date("Y-m-d H:i:s")." {$curPage} Space NOT FOUND! Processing quit";
            exit;
        }
		$startTime = '2011-01-01'; //只统计从2011年开始的CASE和文章
        $startTime2= mktime(0,0,0,1,1,2011);
        foreach($spaces as $space)
        {
            $cases = FlowClient::getInstance()->getIdAndSpaceName4sitemap($space->id,$startTime);
			$articles = ArticleClient::getInstance()->getIdAndSpaceName4sitemap($space->id,$startTime2);
            $sourceType = ($space->isOpenFlow())?(Space::SPACE_SITEMAP_SOURCE_FLOW):(Space::SPACE_SITEMAP_SOURCE_CASE);
			$this->createSitemap($cases, $space->user->name, $sourceType, $indexFile);
			$this->createSitemap($articles, $space->user->name, Space::SPACE_SITEMAP_SOURCE_ARTICLE, $indexFile);
		}
		echo date("Y-m-d H:i:s")." {$curPage},".(isset($pageSize)?$pageSize:'')." Finshed! Process Space number:".count($spaces)."\n";
    }/*}}}*/
	public static function batchLoadSpace($doctorIds)
	{
		$spaceList = array();
		if(empty($doctorIds) == false)
		{
			$spaceList = SpaceClient::getInstance()->getListByHostIdsAndType($doctorIds);
		}
		return $spaceList;
	}
 public function ad($request, $response)
 {/*{{{*/
     $response->topTitle = "电话咨询";
     //右上方,该代码来自400 indexcontroller的function index
     $statistics = SpaceClient::getInstance()->getStatistics();
     // 1. 成功通话的人数
     $response->successCallPatientNum = $statistics['successtelserviceorders'];
     //2. 开通电话咨询的医生人数
     $response->openCallDoctorNum = $statistics['opentelservicedoctors'];
     $response->title = "电话咨询_好大夫在线";
 }/*}}}*/
    public function facultyDoctorSchedulePost($request, $response) {
        $doctorIds = $request->doctor_ids;
        if ($request->upDoctor > 0) {
            $doctorIds = $this->moveSwapItem( $doctorIds, $request->upDoctor, true );
        }

        if ($request->downDoctor > 0 ) {
            $doctorIds = $this->moveSwapItem( $doctorIds, $request->downDoctor, false );
        }
        
        SpaceClient::getInstance()->setScheduleDataOrder( $this->_newSpace->id,$doctorIds );
        $this->message('医生门诊修改成功', $response);
    }
 public function before($context)
 {
     $spaceUserName = WebUtil::getSpaceUserName($context->request);
     $space = SpaceClient::getInstance()->getSpaceByUserName($spaceUserName);
     $userId = UserClient::getInstance()->getCheckedSeed('id');
     $user = DAL::get()->find('user', $userId);
     if ($space->isNull()) {
         header('Location: http://www.haodf.com');
         exit;
     }
     if (empty($userId) || $space->user->id != $userId && false == $user->isAdmin()) {
         $msg = rawurlencode('你没有权限操作!');
         header('Location: ' . $space->getUrl() . 'index/showmessage?msg=' . $msg);
         exit;
     }
 }
 public function __construct($request, $response)
 {
     /*{{{*/
     parent::__construct($request, $response);
     $response->imgTimestamp = BeanFinder::get('configs')->imgTimestamp;
     $spaceUserName = WebUtil::getSpaceUserName($request);
     $this->space = SpaceClient::getInstance()->getSpaceByUserName($spaceUserName);
     if ($this->space->isNull()) {
         header('Location: http://www.haodf.com');
         exit;
     }
     if ($this->space->isHospitalFaculty()) {
         $requestUri = $_SERVER['REQUEST_URI'];
         header('Location: http://' . URL_PREFIX . $this->space->user->name . '.haodf.com' . $requestUri);
         exit;
     }
     $this->user = NullEntity::create();
     $userId = UserClient::getInstance()->getCheckedSeed('id');
     if ($userId) {
         $this->user = DAL::get()->find('user', $userId);
     }
     $response->space = $this->space;
     $response->user = $this->user;
     //未登录 或者 站外链接访问 skips
     if ($this->user->isNull() || false == $request->isQueryFromHDF()) {
         $this->skips($response);
     }
     $this->initModules($request, $response);
     $this->spaceIsLogin = $this->isSpaceLogin();
     $response->spaceIsLogin = $this->spaceIsLogin;
     $response->isSpaceUser = $this->isSpaceUser();
     $response->unreadCaseCount = $this->getUnReadCaseCount();
     if ($this->space->modulecase->isNull()) {
         SpaceModuleCaseClient::getInstance()->initModuleCase($this->space);
     }
     $this->accessLog();
     $configs = BeanFinder::get('configs');
     $response->imgUrl = $configs->imgUrl;
     $response->spaceStyleId = $request->view_style_id ? $request->view_style_id : $this->space->getSpaceStyleId();
     $response->_window_id = $request->window_id;
     $response->spaceBaseUrl = URL_PREFIX . $this->space->userName . '.haodf.com';
     $response->title = $this->space->name . '大夫个人网站';
     $response->scripts = array();
     $response->spaceHits = $this->getSpaceHits($request);
     $response->goodDoctorList = $this->getGoodDoctorListOf2013();
     $response->patientGoodDoctorList = $this->getPatientGoodDoctorListOf2013();
 }
 public function before($context)
 {
     $spaceUserName = WebUtil::getSpaceUserName($context->request);
     $space = SpaceClient::getInstance()->getSpaceByUserName($spaceUserName);
     $userId = UserClient::getInstance()->getCheckedSeed('id');
     $user = DAL::get()->find('user', $userId);
     if ($space->isNull()) {
         header('Location: http://www.haodf.com');
         exit;
     }
     $auditor = DAL::get()->find_by_userid('auditor', $userId);
     if (empty($userId) || $space->user->id != $userId && $userId != 6 && FollowupAssistantClient::getInstance()->hasAssistRights($userId, $space->id) == false && $auditor->isNull()) {
         $msg = rawurlencode('你没有权限操作!');
         header('Location: ' . $space->getUrl() . 'index/showmessage?msg=' . $msg);
         exit;
     }
 }
    public function before($context) 
    {
    	$spaceUserName = WebUtil::getSpaceUserName($context->request);
    	$space = SpaceClient::getInstance()->getSpaceByUserName($spaceUserName);
        /**
         * 测试医院下所有space只能在办公区访问 
         *
         **/
    	$userId = UserClient::getInstance()->getCheckedSeed('id');
    	$user = DAL::get()->find('user', $userId);
        $hdferUserNames = array('verygoodman', 'willowliu', 'dvsj', 'yangshiqi');
        if(in_array($user->name, $hdferUserNames) == false && $space->host instanceof Doctor && $space->host->hospitalfaculty->hospital->isInnerTestHospital() && false == RequestDelegate::isOfficeIp())
        {
    		header('Location: http://www.haodf.com');
			exit;
    	}
    }
 public function showList($request, $response)
 {
     $options['content'] = $request->content;
     $options['status'] = $request->status;
     if ($request->status === '') {
         unset($options['status']);
     }
     $options['source'] = $request->source;
     $options['type'] = $request->type;
     list($userAdviceList, $pageInfo) = SpaceClient::getInstance()->getUserAdviceList($options, $request->p, self::USED_ADVICE_PAGE_SIZE);
     $response->userAdviceList = $userAdviceList;
     $response->pagelink = PageNav::getNavLink(PageNav::getPageNavTemplate("/useradvice/showlist?status=" . $options['status'] . "&type=" . $options['type'] . "&source=" . $options['source'] . "&p="), $pageInfo['nowpage'], $pageInfo['pagesize'], $pageInfo['total']);
     $response->title = '用户建议列表';
     $response->content = $options['content'];
     $response->status = $options['status'];
     $response->source = $options['source'];
     $response->type = $options['type'];
 }
 public function addPost($request, $response)
 {
     /*{{{*/
     $this->myProjectOperator->checkAdminAuthOrQuit('insert');
     $userName = $request->userName;
     $user = UserClient::getInstance()->getByUserName($userName);
     DBC::requireTrue($user instanceof User, "User {$userName} 不存在.");
     $name = $request->name;
     $role = $request->role;
     $projectOrgId = $request->projectOrgId;
     $projectOrg = DAL::get()->find('projectOrg', $projectOrgId);
     if ($projectOrg->belongtoOneHospital()) {
         $space = SpaceClient::getInstance()->getSpaceByUserName($userName);
         //	        DBC::requireTrue($space instanceof Space,"Space $userName 不存在.");
     }
     $projectOperatorId = ProjectOperatorClient::getInstance()->addProjectOperator($user->id, $name, $role, $projectOrgId, $this->myProjectOperator->id);
     $preMsg = "成功新增操作员 {$projectOperatorId}, {$userName}, {$name} ";
     $response->setRedirect($response->router->urlfor('projectoperatormgr/listofall', array('preMsg' => $preMsg)));
 }
 public function askIntentionintro($request, $response)
 {/*{{{*/
     $caseHostUserId = $request->getRequest('spaceid', 0);
     $askSpace = DAL::get()->find('space', $caseHostUserId);
     $message = $request->message;
     $response->statistics = SpaceClient::getInstance()->getStatistics();
     $response->message = $message;
     $response->askSpaceObjectBefore = $askSpace;
     $anserPhoneCount = PaymentClient::getInstance()->getDoctorSatisfactionCntList($askSpace->id);
     $anserPhoneCount = isset($anserPhoneCount[0])?$anserPhoneCount[0]['cnt'] : 0;
     $phoneComments = PaymentClient::getInstance()->getDoctorSatisfactionList($askSpace->host->id);
     $response->phoneComments = isset($phoneComments[$askSpace->host->id]['scorecnt'])?$phoneComments[$askSpace->host->id]['scorecnt'] : 0;
     $response->anserPhoneCount = $anserPhoneCount;
     //dodo::wxy 添加医生一句话
     $owner = DAL::get()->find_by_relatedObjectid_and_relatedobjecttype('telowner', $askSpace->id, TelOwner::TYPE_USER);
     $response->owner = $owner;
     $docWords = (false == $owner->isNull() && $owner->isSpaceOwner())?$owner->getSpaceExt()->getDoctorWords():'';
     $response->wordLen = $docWords?(int)strlen($docWords):'';
     $response->normalWord = $docWords?$docWords:'';
     $response->excessWord = $docWords?XString::strString(array($docWords),0,300)."...":'';
 }/*}}}*/
    protected function getData($nowPage, $pageSize)
    {/*{{{*/
        $options = array();
        $page['nowPage'] = $nowPage;
        $page['pageSize'] = $pageSize;
        $spaceList = SpaceClient::getInstance()->getCaseOpenedSpaceList($options, $page);

        $res = array();
        if ($spaceList)
        {
            $diseaseDoctorList = $this->getDiseaseDoctor($spaceList['spaceList']);
            foreach ($spaceList['spaceList'] as $space)
            {
                $res[$space->id]['item'] = $this->getRealData($space, $diseaseDoctorList);
                unset($space);
            }
        }
        unset($spaceList,$diseaseDoctorList);
        BeanFinder::get('LocalCache')->removeAll(); 
        return $res;
    }/*}}}*/
 public function showIntentionCaptcha($request, $response)
 {
     $request->convertToGBK();
     $captcha = $request->getRequest('captcha', '');
     $captchaStatus = $request->getRequest('captchaStatus', '0');
     $medicalProjectName = $request->getRequest('medicalProjectName', '');
     $spaceName = $request->getRequest('spaceName', '');
     $patientName = $request->getRequest('patientName', '');
     $patientPhone = $request->getRequest('patientPhone', '');
     //定义一个bool变量,判断是否为高级搜索,当有一个条件不为空的时候,就为高级搜索,这时候搜索是忽略验证码输入去搜索
     $isAdvancedSearchFlag = $captchaStatus != '0' || $medicalProjectName != '' || $spaceName != '' || $patientName != '' || $patientPhone != '';
     $medicalProjectCaptchas = array();
     if ($isAdvancedSearchFlag) {
         $spaceIds = SpaceClient::getInstance()->getSpacesByName($spaceName);
         var_dump($spaceIds);
         exit;
         $patientIds = DAL::get()->find_id_by_name_and_mobile('patient', $patientName, $patientPhone);
     } else {
         $medicalProjectCaptchas = DAL::get()->find_all_by_captcha('medicalprojectcaptcha', $captcha);
     }
     $response->medicalProjectCaptchas = $medicalProjectCaptchas;
 }
	protected function getSpacePostCntInfo($caseSpaceList)
	{
		if($caseSpaceList) 
		{
			//两周内回复数
			foreach ($caseSpaceList as $space)
			{
				if($space instanceof Space)
				{
					$spaceIds[] = $space->id;
				}
			}
			$tmpResults = array();
			if(empty($spaceIds) == false){
				$tmpResults = SpaceClient::getInstance()->getTmpSpacePostCnt($spaceIds);
			}
			$spacePostCntInfos = array();
			foreach($tmpResults as $tmpResult){
				$spacePostCntInfos[$tmpResult['userid']] = $tmpResult['postcount'];
			}
			return $spacePostCntInfos;
		}
	}
 public function update($request, $response)
 {
     $id = $request->id;
     //被修改的userid
     $userInfo = $request->data;
     //被修改的userid
     //获取当前操作用户id
     $user = UserClient::getInstance()->getCurrentUser();
     $userInfo['modiferid'] = $user->id;
     $updateUser = DAL::get()->find('user', $id);
     $valueUserMobile = isset($userInfo['mobile']) ? UserClient::getInstance()->getSpaceByUserMobile($userInfo['mobile'], $id) : '';
     if (isset($userInfo['mobile']) && $userInfo['mobile'] && false == XString::isMobile($userInfo['mobile'])) {
         $msg = "您填写的手机号码不合要求,请修改后重新提交";
     } else {
         if ($updateUser->hasConfirmedSpace() && $updateUser->space->isDoctor() && isset($userInfo['mobile']) && $valueUserMobile) {
             $msg = "此手机号码已经绑定了注册医生,请重新确定手机号";
         } else {
             if ($updateUser->hasSpace() && $userInfo['realName']) {
                 //自动更新space上冗余的spacehostname
                 SpaceClient::getInstance()->setProperties($id, array('name' => $userInfo['realName']));
             }
             $userId = UserClient::getInstance()->modifyInfoNew($id, $userInfo);
             if ($userId) {
                 $msg = "操作成功了 ";
             } else {
                 $msg = "操作失败了 ";
             }
         }
     }
     if (DoctorComment::hasRightToUpdateUserContent($this->inspector->id)) {
         //获取被操作的用户
         $operationedUser = DAL::get()->find('User', $request->id);
         $logId = S3LogClient::getInstance()->add($this->inspector, $operationedUser->getLogable()->action(UserLog::ACTION_ADMIN_CONTENT, $request->adminContent));
     }
     $url = $response->router->urlfor('user/showuserdetail', array('id' => $id, 'msg' => $msg));
     $response->setRedirect($url);
 }
 public function getFlowList($request, $response)
 {/*{{{*/
     $hospitalId = $request->partnerConfig->hospitalId;
     $option['hospitalId'] = $hospitalId;
     $out = SpaceClient::getInstance()->getCaseOpenDoctorIds4HzHospital($currentPage = 1, $pageSize = 1000, $option);
     $ids = $out['ids'];
     $flowList = array();
     if (false == empty($ids))
     {
         $flowList = FlowClient::getInstance()->getZixunFlowBySpaceIds($ids, $currentPage = 1, $pageSize = 4);
         $flowList = $flowList['flowList'];
     }
     $response->flowList = $flowList;
     return $request->partnerConfig->domain;
 }/*}}}*/
 private function getPatientInfoForPatient($response, $thread)
 {/*{{{*/
     /** 患友会分组*/
     if ($this->_newSpace->isDoctor() && $this->_newSpace->isPatientOpened())
     {
         $isResidentEvil = ForumClient::getInstance()->isResidentEvil($this->_newSpace->id, $thread->user->id);
         //成员数
         $memberCount = PatientClubClient::getInstance()->getResidentEvilMemberCount('regroup', $this->_newSpace->id);
         //所有组(去掉默认组)
         $groupList = DAL::get()->find_all_by_spaceid_and_type('ReGroup', $this->_newSpace->id, ReGroup::TYPE_1);
         //用户所在组
         $groups = ForumClient::getInstance()->getGroupByUserId($thread->user->id, $this->_newSpace->id);
         $reboardIdArr = array();
         $spaceTopic = array();
         if (empty($groups['list']) == false){
             foreach($groups['list'] as $group)
             {
                 if ($group->reboard->isNull() == false)
                     $reboardIdArr[] = $group->reboard->id;
             }
         }
         //取话题
         if (empty($reboardIdArr) == false)
             $spaceTopic = DAL::get()->find_all_by_reboardid_and_spaceid('ReTopic', $reboardIdArr, $this->_newSpace->id, 5);
         $groupList = ForumClient::getInstance()->getResidentEvilSpaceByUserId($thread->user->id);
         list($groupInfo, $reSpaceList) = SpaceClient::getInstance()->sortGroupBySpace($groupList);
         if(isset($reSpaceList[$thread->space->id]))
             unset($reSpaceList[$thread->space->id]);
         $response->reSpaceList = $reSpaceList;
         $response->groups = $groups;
         $response->spaceTopic = $spaceTopic;
         $response->isResidentEvil = $isResidentEvil;
         $response->memberCount = $memberCount;
     }
 }/*}}}*/
 public function closeShowChargeNotice($request, $response)
 {/*{{{*/
     $spaceId = $request->getRequest('spaceId',true);
     SpaceClient::getInstance()->closeShowChargeFlowTip($spaceId);
 }/*}}}*/
 public function searchFund($request, $response)
 {
     /*{{{*/
     $nowPage = (int) $request->getRequest('p', 1);
     $pageSize = 25;
     $total = 500;
     $options = array();
     $res = array();
     if ($request->keyword) {
         $spaces = SpaceClient::getInstance()->getSpacesByName($request->keyword);
         $spaceIds = array_keys($spaces);
         if ($spaceIds) {
             $res = DZoneClient::getInstance()->getFoundAccountListBySpace($spaceIds);
         }
         $response->pagelink = '';
     } else {
         $res = AccountClient::getInstance()->getFoundAccountList($nowPage, $pageSize);
         $response->pagelink = PageNav::getNavLink(PageNav::getPageNavTemplate("/present/searchfund?showContent=1&p="), $nowPage, $pageSize, $total);
     }
     $response->res = $res;
 }
 public function doctorReceiveRemindSmsPost($request, $response)
 {
     /*{{{*/
     DBC::requireTrue($this->space->user->verifyToken($request->token), '验证码错误');
     $remindSms = $request->remindSms;
     $mobile = trim($request->mobile);
     if ($mobile && $remindSms == 1) {
         DBC::requireTrue(XString::isMobile($mobile), '您填写的手机号码不合要求,请修改后重新提交');
         $valueUserMobile = UserClient::getInstance()->getSpaceByUserMobile($mobile, $this->user->id);
         DBC::requireTrue(false == $valueUserMobile, '此手机号码已经绑定了注册医生,请重新确定手机号');
         UserClient::getInstance()->setMobile($this->space->id, $mobile, $this->user->id);
         SpaceClient::getInstance()->setProperties($this->space->id, array('receiveLoginRemindSms' => $remindSms));
         $this->message('信息修改成功', $response);
     } else {
         if ($remindSms == 0) {
             SpaceClient::getInstance()->setProperties($this->space->id, array('receiveLoginRemindSms' => $remindSms));
             $this->message('信息修改成功', $response);
         } else {
             DBC::requireTrue(XString::isMobile($mobile), '您填写的手机号码不合要求,请修改后重新提交');
         }
     }
 }
    public function newCaseWithMultiPatients($userId, $doctorId, $title, $tag, $content1, $content2, $content3, $attachmentIds, $deviceType, $patientId, $name, $sex, $relation, $province, $city, $mobile, $birthday)
    {/*{{{*/
		$request = new Request();

        /*********start*****修复错误数据:userId为0,手动修复userId,关联到的patient提示重新登录*********/
        if ($userId <= 0)
        {
            //错误数据:patient关联的userId为0,提示用户重新登录
            if (in_array($patientId, self::$patientIds))
            {
                $content = array('gotodetailnotice' => '您在好大夫在线的登陆账号存在安全隐患,我们已通过短信给您发送了新的账号和密码,如果未收的短信请等候或联系我们!');
                if ($request->os == 'ios')
                {
                    $content['sign'] = '1';
                }
                $this->content = $content;
                return 0;
            }
        }
        /*********end*******修复错误数据:userId为0,手动修复userId,关联到的patient提示重新登录*********/

        /*
		if($request->os == 'ios')
		{
			$ver = $request->v;
			error_log("[".XDateTime::now()."] ".print_r("userid=$userId, doctorid=$doctorId, title=$title, $tag, $content1, $content2, $content3, $attachmentIds, $deviceType, $patientId, $name, $sex, $relation, $province, $city, $mobile, $birthday, $ver", true)."\n", 3, "/tmp/whd1.log");
		}
        */
        if(strlen($name) > 20)
        {
            $this->setErrorCode(339);
            return 0;
        }
        $databucket = new Databucket(); 
        if($databucket->isThreadServiceSuspendTime())
        {
           $this->setErrorCode(901); 
           return 0;
        }
        $user = DAL::get()->find('user', $userId);
        if ($userId <=0 || $user->isNull())
        {    
            $this->setErrorCode(107);
            return 0;
        }    
        $errorcode = $this->checkPatientInfo4NewCase($patientId, $name, $sex, $relation, $province, $city, $birthday, $mobile);
        if($errorcode != 0)
        {
            $this->setErrorCode($errorcode);
            return 0;
        }
        if(0 == $patientId)
        {/*{{{*/
            $birthday = ($birthday != "") ? date('Y-m-d',$birthday) : "";
            $params = array(
                'name' => $name,
                'sex' => $sex,
                'relation' => $relation,
                'province' => $province,
                'birthday' => $birthday,
                'city' => $city,
                'mobile' => $mobile,
            );
            $patient = PatientClient::getInstance()->add($user, $params);
        }/*}}}*/
        else
        {
            if(isset($user->patients[$patientId]))
            {
                PatientClient::getInstance()->updateMobile($patientId, $mobile);
                $patient = $user->patients[$patientId];
            }
            else
            {
                $this->setErrorCode(316);
                return 0;
            }
        }
        $askSpace = new NullEntity();
        //兼容android客户端,doctorId传null字符串的bug
        if ($doctorId == 'null')
        {
            $doctorId = 0;
            $appVer = $request->v;
        }

        if($doctorId)
        {
            $doctor = DAL::get()->find('doctor', $doctorId);
            if($doctor->isNull())
            {
                $this->setErrorCode(132);
                return 0;
            }
            $askSpace = $doctor->space;
            if($askSpace->isNull())
            {
                $this->setErrorCode(144);
                return 0;
            }
            try
            {
                SpaceClient::getInstance()->ensureAllowAskRule($user, $askSpace);
            }
            catch(Exception $ex)
            {
                $this->setErrorCode(320);
                return 0;
            }
        }
        $options = array();
        $options['title'] = $title;
        $options['disease'] = $tag;
        $options['content'] = $content1;
        if ($content2)
        {
            $options['content'] .= "\n\n曾经治疗情况和效果:\n\n".$content2;
        }

        $options['attachmentIds'] = $attachmentIds;
        $options['facultyId'] = 0;
        //就诊过的医院
        $options['prehospital'] = '';
        if($askSpace->isNull() == false)
        {
            $options['facultyId'] = $askSpace->host->hospitalfaculty->faculty->id;
        }
        $options['deviceType'] = $deviceType;
        $options['title'] = htmlspecialchars_decode($options['title'], ENT_QUOTES);
        $options['disease'] = htmlspecialchars_decode($options['disease'], ENT_QUOTES);
        if(mb_strlen(XString::cntrim($options['title'])) < 5 || mb_strlen(XString::cntrim($options['title'])) > 10)
        {
            $this->setErrorCode(167);
            return 0;
        }
        if(mb_strlen(XString::cntrim($options['disease'])) < 1 || mb_strlen(XString::cntrim($options['disease'])) > 20)
        {
            $this->setErrorCode(304);
            return 0;
        }
        if ($user->isNull() || $patient->isNull())
        {
            error_log(print_r(debug_backtrace(), true), 3, '/tmp/ask_user_null.log');
            $this->setErrorCode(206);
            return 0;
        }
        $noticeAfterCase = "您的咨询将由网站医学助理按病情转交合适的医生回复。70%的咨询可在3天内得到医生回复,未回复的咨询将在7天后过期。如病情紧急建议直接去医院就诊。";

        /*加点患者提问成功扣分*/
        $res = ScoreClient::getInstance()->ask($user->id);
        $src = $deviceType;
        $hospital = $options['prehospital'];
        $disease = $options['disease'];
        $title = $options['title'];
        $content = $options['content'];
        $hopeHelp = $content3;
        if($options['attachmentIds'])
        {
            $attachmentIds = explode("," , $options['attachmentIds']); 
        }
        else
        {
            $attachmentIds = array();
        }
        $thread = IntentionClient::getInstance()->add4ThreadFromWap($patient, $askSpace, $src, $hospital, $content, $attachmentIds, $disease, $title, '', $hopeHelp);
        //todo::伪装展示
        $this->content = array('threadId' => $thread->id, 'caseType' => 'thread',  'sign' => 0, 'noticeAfterCase' => $noticeAfterCase);
        if ($thread->isNull())
        {
            $this->setErrorCode(169);
            return 0;
        }
    }/*}}}*/
    public function index($request, $response)
    {/*{{{*/
        if (false == $this->isFromNotice())
        {
            $next = 'http://www.haodf.com';
            if (isset($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_URI']))
            {
                $next = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
            }
            $refer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'http://www.haodf.com';
            $response->setRedirect('http://'.URL_PREFIX.'jiahao.haodf.com/notice.htm?refer='.urlencode($refer).'&next='.urlencode($next));
            return parent::DIRECT_OUTPUT;
        }
        $month = XDateTime::valueOf(date('Y-m-d',(strtotime(XDateTime::now()) - 86400*30)));
        $day = XDateTime::valueOf(date('Y-m-d',(strtotime(XDateTime::now()))));
        $threeDay = XDateTime::valueOf(date('Y-m-d',(strtotime(XDateTime::now()) - 86400*3)));
        $oneYear = XDateTime::valueOf(date('Y-m-d',(strtotime(XDateTime::now()) - 86400*30*12)));

        $beijingHospital = array(
           '协和医院'=>1,
           '同仁医院'=>3,
           '301医院'=>335,
           '北医三院'=>142,
           '人民医院'=>21,
           '妇产医院'=>75,
           '儿童医院'=>24,
           '积水潭医院'=>34,
           '阜外医院'=>25,
           '宣武医院'=>55,
           '天坛医院'=>44,
           '北大肿瘤'=>148);

        $shanghaiHospital = array(
           '瑞金医院'=>424,
           '中山医院'=>420,
           '仁济医院'=>471,
           '华山医院'=>418,
           '新华医院'=>426,
           '长海医院'=>427,
           '上海第一'=>431,
           '红房子医院'=>416,
           '儿童医学中心'=>425,
           '上海九院'=>422,
           '五官科医院'=>419,
           '精神卫生中心'=>827);

        $guangdongHospital = array(
            '省人民医院'=>443,
            '省中医院'=>454,
            '中山一院'=>460,
            '中山二院'=>458,
            '中山三院'=>459,
            '广州市第一'=>446,
            '广医一院'=>453,
            '脑科医院'=>449,
            '广州儿童医院'=>447,
            '深圳北大医院'=>608);

        $otherAreaHospital = array(
            '天津总医院'=>487,
            '天津肿瘤'=>599,
            '天津血液病'=>1904,
            '华西医院'=>488,
            '四川省人民'=>507,
            '华西口腔'=>532,
            '江苏省人民'=>478,
            '南京鼓楼'=>497,
            '南京脑科'=>646,
            '武汉协和'=>494,
            '武汉同济'=>496,
            '湖北省人民'=>530);
        $otherAreaHospitalAddress = array(
            '天津总医院'=>'tianjin',
            '天津肿瘤'=>'tianjin',
            '天津血液病'=>'tianjin',
            '华西医院'=>'sichuan',
            '四川省人民'=>'sichuan',
            '华西口腔'=>'sichuan',
            '江苏省人民'=>'jiangsu',
            '南京鼓楼'=>'jiangsu',
            '南京脑科'=>'jiangsu',
            '武汉协和'=>'hubei',
            '武汉同济'=>'hubei',
            '湖北省人民'=>'hubei');

        $hospitalArray = array_merge($beijingHospital, $shanghaiHospital);
        $hospitalArray = array_merge($hospitalArray, $guangdongHospital);
        $hospitalArray = array_merge($hospitalArray, $otherAreaHospital);

        $hospitalDoctorCount = PlussignChannelClient::getInstance()->getDoctorCountByHospital($hospitalArray);

        $beijingCount = PlussignChannelClient::getInstance()->getDoctorCountByArea('北京');//北京地区开通加号医生总数目
        $shanghaiCount = PlussignChannelClient::getInstance()->getDoctorCountByArea('上海');
        $guangdongCount = PlussignChannelClient::getInstance()->getDoctorCountByArea('广东');

        $bjHospitalFactory = PlussignChannelClient::getInstance()->getFacultyListByCondition('','北京','');//北京地区各个科室开通加号医生数目
        $shHospitalFactory = PlussignChannelClient::getInstance()->getFacultyListByCondition('','上海','');
        $gdHospitalFactory = PlussignChannelClient::getInstance()->getFacultyListByCondition('','广东','');
        $otherHospitalFactory = PlussignChannelClient::getInstance()->getFacultyListByCondition('','其它地区','');
        if(isset($bjHospitalFactory['传染病科']))
        {
            unset($bjHospitalFactory['传染病科']);
        }
        if(isset($gdHospitalFactory['传染病科']))
        {
            unset($gdHospitalFactory['传染病科']);
        }
        if(isset($shHospitalFactory['传染病科']))
        {
            unset($shHospitalFactory['传染病科']);
        }

        $doctorNumber = PlussignChannelClient::getInstance()->getPlusSignDoctorCount();//全国开通加号医生总数目
        $patientNumber = SpaceClient::getInstance()->getPlusSignPatientCount();
        $otherCount = $doctorNumber-$beijingCount-$shanghaiCount-$guangdongCount;//其它地区开通加号医生总数目
        //预约成功患者
        $patientOrderList = PatientClient::getInstance()->getPatientOrderList(6);

        list($response->spacesOfNewContract, $response->newContracts) = BookingClient::getInstance()->getSpaceAndContract4newOpenBooking(20);

        $response->bjHospital = $beijingHospital;
        $response->shHospital = $shanghaiHospital;
        $response->gdHospital = $guangdongHospital;
        $response->otHospital = $otherAreaHospital;
        $response->otAreaHospital = $otherAreaHospitalAddress;
        $response->hospitalDoctorCount = $hospitalDoctorCount;

        $response->beijingCount = $beijingCount;
        $response->shanghaiCount = $shanghaiCount;
        $response->guangdongCount = $guangdongCount;

        $response->bjHospitalFactory = $bjHospitalFactory;
        $response->shHospitalFactory = $shHospitalFactory;
        $response->gdHospitalFactory = $gdHospitalFactory;
        $response->otherHospitalFactory = $otherHospitalFactory;

        $response->doctorNumber = $doctorNumber;
        $response->patientNumber = $patientNumber;
        $response->otherCount = $otherCount;
        $response->patientOrderList = $patientOrderList;
		$response->type = 'index'; //返回页面类型,暂时用于控制二级导航
    }/*}}}*/
    public function promotion($request, $response)
    {/*{{{*/
        $response->title = '感恩答谢';
        $space = SpaceClient::getInstance()->getAnyOneSpace();
        $response->space = $space;
        $params = array();
        $params['limit'] = 3;
        $params['isOnline'] = true;
        $params['hasStock'] = true;
        $popularResult = PresentClient::getInstance()->getPresentsAndSoldCnt($params);
        $response->popularPresents = $popularResult['presents'];

        $recommendPresents = PresentClient::getInstance()->getRecommendedPresents();
        $recommendPresent = array_shift($recommendPresents);
        $response->recommendPresent = $recommendPresent;

        //flow
        $orderby = "postcount";
        $groupby = "spaceid";
        $arr = array(
            'status' => DoctorPatientRef::STATUS_INIT,
            'orderby' => $orderby,
            'groupby' => $groupby,
            );
        $limit = $request->limit;
        $response->limit = $limit;
        if($this->curUser->id)
        {
            $flows = FlowClient::getInstance()->getFlowListByUser($this->curUser->id, $arr);
        }
        if($this->curUser->isNull() || 0 == count($flows))
        {
            $response->allowSend = false;
            $num = 3;
            $heartResult = PresentClient::getInstance()->getBoardByType(SpaceHeartBillboard::TYPE_WEEK,$num);
            $spaceHeartWeekBillboards = $heartResult['rank'];
            $response->spaceHeartWeekBillboards = $spaceHeartWeekBillboards;
        }
        else
        {
             $flowList = array();
             foreach($flows as $flow)
            {
                if($flow->space->host instanceof Doctor)
                {
                    $flowList[] = $flow;
                }
            }
            foreach($flowList as $flow)
            {
                $thankLetterCounts[$flow->id] = $flow->space->host->getCureThankLetterCount();
            }
            $response->refs = ($limit == "all") ? $flowList : array_slice($flowList, 0, 6);
            $response->refCount = count($flowList);
            $response->thankLetterCounts = $thankLetterCounts;
        }
            
            //礼物列表
            
            $page = 1;
            $pageSize = 200;
            $options = array();
            $options['categoryid'] = $request->getRequest('categoryid', 0);
            $options['hasStock'] = true;
            $listResult = PresentClient::getInstance()->showPresentList4Front($page, $pageSize, $options);
            $response->presentList = $listResult['presents'];
            //动态
            $spaceId = 0;
            $bannerResult = PresentClient::getInstance()->showPresentBanner($spaceId, 8);
            $response->onePresentOrders = array_slice($bannerResult['presentOrders'], 0, 4);
            $response->threePresentOrders = array_slice($bannerResult['presentOrders'], 4, 4);
            $response->statistics = SpaceClient::getInstance()->getStatistics();
            //最新礼物更新(临时写,下期更新后就下掉)                                                             
            $newPresents = DAL::get()->find_all_by_condition('Present', 'name in ("马到成功", "吉祥如意")');
            foreach ($newPresents as $presentKey=>$newPresent)
            {
                $newPresents[$newPresent->name] = $newPresent;
                unset($newPresents[$presentKey]);
            }
            $response->presentMdcg = $newPresents['马到成功'];
            $response->presentJxry = $newPresents['吉祥如意'];
    }/*}}}*/
 private function diseaseThread($request, $response)
 {
     /*{{{*/
     $lastCommonCaseNote = $this->space->commonCaseNote;
     $diseasesGbk = XString::convertToGbk($request->diseases);
     SpaceClient::getInstance()->setProperties($this->space->id, array('commonCaseNote' => $diseasesGbk));
     if ($lastCommonCaseNote != $diseasesGbk) {
         SpaceChangeLogClient::getInstance()->addLog($this->space->id, SpaceLog::$type[SpaceLog::SPACE_LOG_TYPE_CASE], $lastCommonCaseNote);
     }
     DZoneClient::getInstance()->replaceSpaceAttribute($this->space->id, Space::ATTR_RECOMMEND_COMMONCASENOTE_UPDATED, 1);
     $diseasesGbk = strlen($diseasesGbk) > 0 ? $diseasesGbk : '暂无';
     return $diseasesGbk;
 }
 public function openService($request, $response)
 {
     /*{{{*/
     $options = array('phoneOpened' => $request->isOpen);
     $options['user'] = $this->space->user;
     $id = SpaceClient::getInstance()->modifySpacePhoneService($this->space->id, $options);
     $response->setRedirect($response->router->urlfor('adminpayment/showaddtelowner', array('type' => 'edit', 'telOwner' => $owner)));
 }
 public function nextSignin($request, $response)
 {
     /*{{{*/
     $user = $this->user;
     $signinId = $request->signinId;
     $ticketId = $request->ticketId;
     $params = array();
     $response->serviceAuditorList = FollowupOwner::getFollowupAuditors();
     $ownerType = 'FollowupOwner';
     //根据审核类型
     //获取工单
     if (empty($ticketId) && empty($signinId)) {
         $ticket = NfsAuditClient::getInstance()->getNextTaskTicket($this->auditor, $ownerType, $ownerType, $params);
     } else {
         $ticket = DAL::get()->find('NfsTaskTicket', $ticketId);
     }
     //报道者
     $patientSignin = new NullEntity();
     if (empty($signinId) && empty($ticket) == false && $ticket->isNull() == false) {
         $patientSignin = $ticket->hostEntity;
     } elseif (empty($signinId) == false) {
         $patientSignin = DAL::get()->find('FollowupOwner', $signinId);
     }
     if ($patientSignin->isNull()) {
         die('审核结束');
     }
     $userQueues = CheckupClient::getInstance()->getUserFollowupQueues($patientSignin->user->id);
     $curQueueId = 0;
     if (empty($userQueues) == false) {
         $curQueues = array_pop($userQueues);
         $curQueueId = $curQueues->isNull() ? 0 : $curQueues->id;
     }
     $userid = $patientSignin->userid;
     $servicePeriod = "未缴费";
     $surgeryDate = "";
     $followupCustomer = FollowupCustomerClient::getInstance()->getFollowupCustomer(array('userid' => $userid));
     if (false == $followupCustomer->isNull()) {
         $surgeryDate = $followupCustomer->surgeryDate->toShortString();
         $var = $followupCustomer->servicePeriod;
         $defList = FollowupCustomer::$searchServicePeriodDef;
         foreach ($defList as $key => $value) {
             if ($var == $key && $var != 0) {
                 $servicePeriod = $value;
             }
         }
     }
     $response->servicePeriod = $servicePeriod;
     $response->curQueueId = $curQueueId;
     $response->assignerId = $this->auditor->id;
     $response->owner = $patientSignin;
     //随访起始(手术)日期的处理,首次报到要取销售记录的
     $response->surgeryDate = $surgeryDate;
     $leaveHospitalDate = $patientSignin->leaveHospitalDate->toShortString();
     if (false == empty($surgeryDate) && $patientSignin->leaveHospitalDate->getTime() == false) {
         $leaveHospitalDate = $surgeryDate;
     } else {
         if ($patientSignin->leaveHospitalDate->getTime() == false) {
             $leaveHospitalDate = XDateTime::today()->toShortString();
         }
     }
     $response->leaveHospitalDate = $leaveHospitalDate;
     $response->userScheme = HealthRecordClient::getInstance()->getPatientSigninScheme($patientSignin->id);
     $response->ticket = $ticket;
     $response->followupStatus = $patientSignin->isOpenFollowup();
     $response->closeFollowupStatus = $patientSignin->isCloseFollowup();
     //获取更多报道信息
     $healthProblems = array();
     $nfsDisease = $patientSignin->getNfsDisease();
     if ($nfsDisease->isNull() == false) {
         $healthProblems = $nfsDisease->getSigninHealthProblems();
     }
     $response->healthProblems = $healthProblems;
     $response->nfsSpaces = SpaceClient::getInstance()->getFollowupSpaceListByFacultyId($patientSignin->space->host->hospitalfaculty->id);
     $response->nfsDiseaseQueueList = CheckupClient::getInstance()->getPermanentQueueByNfsDiseaseIdAndTimeType($patientSignin->nfsDisease->id, CheckupTaskQueue::START_TIME_TYPE_LEAVE_HOSPITAL);
     //出院诊断展示部分
     $resultList = array();
     $diagnosisList = DAL::get()->find_all_by_customerid('LeaveHospitalDiagnosis', $followupCustomer->id);
     foreach ($diagnosisList as $diagnosis) {
         $resultList[$diagnosis->leavehospitaltime] = DiagnosisClient::getInstance()->findAllDiagnosisResultByDiagnosisId($diagnosis->id);
     }
     $response->resultList = $resultList;
     $services = DAL::get()->find_all_by_customerid_and_nfsdiseaseid('followupservicedetail', $followupCustomer->id, $patientSignin->nfsDisease->id);
     XString::sortArray($services, 'startTime', false);
     $response->followupServices = $services;
     $response->comesfrom = $request->comesfrom;
 }
 private function searchSpace($name)
 {/*{{{*/
     $spaceIds = array();
     if($name)
     {
         $spaces = SpaceClient::getInstance()->getSpacesByName($name);
         $spaceIds = array();
         foreach ($spaces as $space)
         {
             if (false == $space->isNull())
             {
                 $spaceIds[] = $space->id;
             }
         }
     }
     return $spaceIds;
 }/*}}}*/
 /**
  * modifyDiagnoseNote 
  * 修改出诊信息
  * @param mixed $userId 
  * @param mixed $content 
  * @access public
  * @return void
  */
 public function modifyDiagnoseNote($userId, $content)
 {/*{{{*/
     $space = DAL::get()->find('space', $userId); 
     $res = $this->checkSpace($space);
     if($res)
     {
         $this->setErrorCode($res);
         return 0;
     }
     SpaceClient::getInstance()->setProperties($space->id, array('note2'=>$content));
     $this->buildBookingTask($space, '', $content);
     $this->content = array('id'=>$userId);
 }/*}}}*/