Esempio n. 1
0
 /**
  * 执行图度规则过滤
  *
  * 遍历所有接收人所有可用规则,并执行过滤
  * @param $params
  */
 public function filterTudu($params)
 {
     if (empty($params['tuduid']) || empty($params['tsid'])) {
         return;
     }
     $tuduId = $params['tuduid'];
     $manager = Tudu_Tudu_Manager::getInstance(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS));
     /** @var $daoRule Dao_Td_Rule_Rule */
     $daoRule = Tudu_Dao_Manager::getDao('Dao_Td_Rule_Rule', Tudu_Dao_Manager::DB_TS);
     $users = $manager->getTuduUsers($tuduId);
     if (!$users) {
         $this->getLogger()->warn("Tudu id:{$tuduId} Users are not exists");
         return;
     }
     $tudu = $manager->getTuduById($tuduId, $users[0]['uniqueid']);
     if (null === $tudu) {
         $this->getLogger()->warn("Tudu id: {$tuduId} is not exists");
         return;
     }
     $tudu = $tudu->toArray();
     $expire = 3600 * 24;
     //定义Memcache过期时间: 一天
     // 获取接收用户规则过滤
     foreach ($users as $user) {
         $unId = $user['uniqueid'];
         $rules = $this->_memcache->loadCache(array($daoRule, 'getRulesByUniqueId'), array($unId, array('isvalid' => true)), $expire);
         if ($rules->count() <= 0) {
             continue;
         }
         foreach ($rules as $rule) {
             $filters = $rule->getFilters();
             $filterCount = $filters->count();
             $matchCount = 0;
             if ($filterCount <= 0) {
                 continue;
             }
             foreach ($filters as $filter) {
                 $contain = false;
                 switch ($filter->what) {
                     // 发起人
                     case 'from':
                         if (is_array($filter->value)) {
                             foreach ($filter->value as $item) {
                                 $item = str_replace(array('oray.com', 'tudu.com'), array('oray', ''), $item);
                                 if ($item == $tudu['from'][3]) {
                                     $contain = true;
                                     break;
                                 }
                             }
                         }
                         break;
                         // 接收人,抄送人
                     // 接收人,抄送人
                     case 'to':
                     case 'cc':
                         if (is_array($filter->value)) {
                             $count = 0;
                             $match = 0;
                             foreach ($filter->value as $item) {
                                 $count++;
                                 $item = str_replace(array('oray.com', 'tudu.com'), array('oray', ''), $item);
                                 if (isset($tudu[$filter->what][$item])) {
                                     $match++;
                                 }
                             }
                             if ($count == $match) {
                                 $contain = true;
                             }
                         }
                         break;
                     case 'subject':
                         $contain = false !== strpos($tudu['subject'], $filter->value);
                         break;
                 }
                 if ($filter->type == 'contain' && $contain || $filter->type == 'exclusive' && !$contain) {
                     $matchCount++;
                 }
             }
             // 匹配过滤条件,执行规则操作
             if ($matchCount == $filterCount) {
                 // 标签
                 if ($rule->operation == 'label') {
                     $manager->addLabel($tuduId, $unId, $rule->value);
                     // 忽略
                 } elseif ($rule->operation == 'ignore') {
                     $manager->deleteLabel($tuduId, $unId, '^i');
                     $manager->addLabel($tuduId, $unId, '^g');
                     // 星标
                 } elseif ($rule->operation == 'starred') {
                     $manager->addLabel($tuduId, $unId, '^t');
                 }
                 // 是否需要邮件提醒
                 if (!empty($rule->mailRemind)) {
                     $mailRemind = $rule->mailRemind;
                     // 邮件提醒可用且图度在指定的板块的
                     if ($mailRemind['isvalid'] && !empty($mailRemind['boards']) && !empty($mailRemind['mailbox']) && is_array($mailRemind['boards']) && in_array($tudu['boardid'], $mailRemind['boards'])) {
                         $emails = array();
                         foreach ($mailRemind['mailbox'] as $email) {
                             // 必须是邮箱
                             if (Oray_Function::isEmail($email)) {
                                 $emails[] = $email;
                             }
                         }
                         if (!empty($emails)) {
                             $remind = array('tuduid' => $tudu['tuduid'], 'tsid' => $params['tsid'], 'emails' => $emails, 'subject' => $tudu['subject'], 'sender' => $tudu['from'][0], 'lastupdate' => date('Y-m-d H:i:s', $tudu['lastposttime']), 'content' => mb_substr(strip_tags($tudu['content']), 0, 20, 'utf-8'), 'type' => $this->_typeNames[$tudu['type']], 'url' => 'http://' . $tudu['orgid'] . '.tudu.com/tudu/view?tid=' . $tudu['tuduid']);
                             $this->getLogger()->warn("Send Email notify to:" . implode(',', $emails));
                             // 发送邮件提醒请求
                             $data = implode(' ', array('send', 'email', '', http_build_query($remind)));
                             $this->_httpsqs->put($data, $this->_options['httpsqs']['names']['send']);
                         }
                     }
                 }
             }
         }
     }
     $this->getLogger()->debug("Tudu id:{$tuduId} done");
 }