Esempio n. 1
0
 /**
  * 执行讨论数据处理
  */
 public function run()
 {
     foreach ($this->_dbs as $key => $db) {
         // 清理过期置顶公告
         $sql = 'SELECT tudu_id FROM td_tudu WHERE type = \'notice\' AND end_time IS NOT NULL AND is_top = 1 ' . 'AND end_time < ' . strtotime('today');
         Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $db, true);
         $manager = Tudu_Tudu_Manager::getInstance();
         $array = $db->fetchAll($sql);
         foreach ($array as $item) {
             if ($manager->updateTudu($item['tudu_id'], array('istop' => 0))) {
                 $users = $manager->getTuduUsers($item['tudu_id']);
                 foreach ($users as $user) {
                     if (!$user['isread']) {
                         continue;
                     }
                     $manager->deleteLabel($item['tudu_id'], $user['uniqueid'], '^i');
                 }
                 $this->getLogger()->info("Notice id:{$item['tudu_id']} update success");
                 continue;
             }
             $this->getLogger()->warn("Notice id:{$item['tudu_id']} update failed");
         }
         $this->getLogger()->info("Ts db:({$key}) process complete");
     }
 }
Esempio n. 2
0
 public function preDispatch()
 {
     // 用户未登录
     /*if (!$this->_user->isLogined()) {
           throw new TuduX_OpenApi_Exception("Access protected API without a valided access token", TuduX_OpenApi_ResponseCode::MISSING_AUTHORIZE, 403);
       }*/
     Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_SITE, $this->_bootstrap->multidb->getDb('site'));
 }
Esempio n. 3
0
 /**
  *
  */
 public function startUp()
 {
     foreach ($this->_options['multidb'] as $key => $item) {
         if (0 === strpos($key, 'ts')) {
             $this->_tsDbs[$key] = Zend_Db::factory($item['adapter'], $item['params']);
             continue;
         }
         Tudu_Dao_Manager::setDb($key, Zend_Db::factory($item['adapter'], $item['params']));
     }
     $this->_memcache = new Oray_Memcache(array('compression' => $this->_options['memcache']['compression'], 'compatibility' => $this->_options['memcache']['compatibility']));
     $this->_memcache->addServer($this->_options['memcache']['host'], $this->_options['memcache']['port']);
     $this->_httpsqs = new Oray_Httpsqs($this->_options['httpsqs']['host'], $this->_options['httpsqs']['port'], $this->_options['httpsqs']['charset'], $this->_options['httpsqs']['names']['im']);
     $this->_im = new Oray_Im_Client($this->_options['im']['host'], $this->_options['im']['port']);
     ini_set("memory_limit", "-1");
 }
Esempio n. 4
0
 /**
  * 执行讨论数据处理
  */
 public function run()
 {
     foreach ($this->_dbs as $key => $db) {
         // 清理过期讨论
         $sql = 'SELECT tudu_id, org_id FROM td_tudu WHERE type = \'discuss\' AND end_time IS NOT NULL ' . 'AND is_draft = 0 AND is_done = 0 AND end_time < ' . strtotime('today');
         Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $db, true);
         $manager = Tudu_Tudu_Manager::getInstance();
         $daoLog = Tudu_Dao_Manager::getDao('Dao_Td_Log_Log', Tudu_Dao_Manager::DB_TS);
         $array = $db->fetchAll($sql);
         foreach ($array as $item) {
             if ($manager->closeTudu($item['tudu_id'], true)) {
                 $this->getLogger()->info("Discuss id:({$item['tudu_id']}) close success");
                 // 成功记录操作日志
                 $daoLog->createLog(array('orgid' => $item['org_id'], 'targettype' => Dao_Td_Log_Log::TYPE_TUDU, 'targetid' => $item['tudu_id'], 'uniqueid' => '^system', 'action' => Dao_Td_Log_Log::ACTION_CLOSE, 'detail' => serialize(array('isdone' => true)), 'logtime' => time()));
                 continue;
             }
             $this->getLogger()->warn("Discuss id:{$item['tudu_id']} close failure");
         }
         $this->getLogger()->info("Ts db:({$key}) process complete");
     }
 }
Esempio n. 5
0
 /**
  * 执行
  */
 public function run()
 {
     do {
         $data = $this->_httpsqs->get($this->_options['httpsqs']['names']['send']);
         if (!$data || $data == 'HTTPSQS_GET_END') {
             break;
         }
         list($module, $action, $sub, $query) = explode(' ', $data);
         if ($module != 'send') {
             $this->getLogger()->warn("Invalid param \"module\" values {$module}");
         }
         parse_str($query, $query);
         if (empty($query['tsid'])) {
             $this->getLogger()->warn("Missing param \"tsid\"");
             continue;
         }
         if (!isset($this->_tsDbs['ts' . $query['tsid']])) {
             return;
         }
         $tsId = $query['tsid'];
         Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $this->_tsDbs['ts' . $tsId]);
         switch ($action) {
             case 'tudu':
                 $this->sendTudu($query);
                 break;
             case 'reply':
                 $this->sendReply($query);
                 break;
             case 'meeting':
                 $this->sendMeeting($query);
                 break;
             case 'email':
                 $this->sendEmail($query);
                 break;
             default:
                 break;
         }
     } while (true);
 }
Esempio n. 6
0
 /**
  *
  * @param string $params
  */
 public function deleteUser($params)
 {
     list($orgId, $uniqueIds) = explode(':', $params);
     $daoOrg = Tudu_Dao_Manager::getDao('Dao_Md_Org_Org', Tudu_Dao_Manager::DB_MD);
     $org = $daoOrg->getOrg(array('orgid' => $orgId));
     $tsId = $org->tsid;
     Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $this->_tsDbs['ts' . $tsId]);
     $manager = Tudu_Tudu_Manager::getInstance(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS));
     $daoTudu = Tudu_Dao_Manager::getDao('Dao_Td_Tudu_Tudu', Tudu_Dao_Manager::DB_TS);
     $uniqueIds = explode(',', $uniqueIds);
     foreach ($uniqueIds as $uniqueId) {
         $tudus = $daoTudu->getUserTudus(array('uniqueid' => $uniqueId, 'type' => 'task'));
         if (count($tudus)) {
             foreach ($tudus as $tudu) {
                 // 确认图度
                 if ($tudu['role'] == 'from' && $tudu['needconfirm'] && $tudu['percent'] == 100) {
                     $ret = $manager->doneTudu($tudu['tuduid'], true, 0);
                     if (!$ret) {
                         $this->getLogger()->warn("Done Tudu failed id:{$tudu['tuduid']}");
                     }
                 }
                 // 取消(终止)
                 if ($tudu['role'] == 'from' && $tudu['from'] == $tudu['to']) {
                     $params = array('status' => Dao_Td_Tudu_Tudu::STATUS_CANCEL, 'isdone' => 1);
                     // 更新图度
                     $ret = $manager->updateTudu($tudu['tuduid'], $params);
                     if (!$ret) {
                         $data = serialize($params);
                         $this->getLogger()->warn("Update Tudu failed id:{$tudu['tuduid']} data:{$data}");
                     }
                     // 完结图度
                     $ret = $manager->doneTudu($tudu['tuduid'], true, 0);
                     if (!$ret) {
                         $this->getLogger()->warn("Done Tudu failed id:{$tudu['tuduid']}");
                     }
                 }
                 // 图度执行人待定
                 if ($tudu['role'] == 'to') {
                     // 移除执行信息
                     $ret = $daoTudu->removeAccepter($tudu['tuduid'], $uniqueId);
                     if (!$ret) {
                         $this->getLogger()->warn("Remove Accepter failed Tudu id:{$tudu['tuduid']} uid:{$uniqueId}");
                     }
                     if ($tudu['to'] == $tudu['accepterinfo']) {
                         // 更新to字段
                         $ret = $manager->updateTudu($tudu['tuduid'], array('to' => ''));
                         if (!$ret) {
                             $this->getLogger()->warn("Update Tudu failed id:{$tudu['tuduid']} to:[clear]");
                         }
                     } else {
                         $newto = array();
                         $to = explode("\n", $tudu['to']);
                         for ($i = 0; $i < count($to); $i++) {
                             if ($to[$i] != $tudu['accepterinfo']) {
                                 $newto[] = $to[$i];
                             }
                         }
                         // 更新to字段
                         $ret = $manager->updateTudu($tudu['tuduid'], array('to' => implode("\n", $newto)));
                         if (!$ret) {
                             $this->getLogger()->warn("Update Tudu failed id:{$tudu['tuduid']} to:[clear-{$tudu['accepterinfo']}]");
                         }
                     }
                 }
             }
         }
         $this->getLogger()->debug("Delete User Update Tudu On Uniqueid:{$uniqueId} done");
     }
 }
Esempio n. 7
0
 /**
  * 执行
  */
 public function run()
 {
     do {
         $data = $this->_httpsqs->get($this->_options['httpsqs']['names']['tudu']);
         if (!$data || $data == 'HTTPSQS_GET_END') {
             break;
         }
         list($module, $action, $sub, $query) = explode(' ', $data);
         parse_str($query, $query);
         if ($module !== 'tudu') {
             $this->getLogger()->warn("Invalid param \"module\" values {$module}");
         }
         if (empty($query['tsid'])) {
             $this->getLogger()->warn("Missing param \"tsid\"");
             continue;
         }
         if (!isset($this->_tsDbs['ts' . $query['tsid']])) {
             return;
         }
         $tsId = $query['tsid'];
         Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $this->_tsDbs['ts' . $tsId]);
         switch ($action) {
             case 'create':
                 $this->createTudu($query);
                 break;
             case 'update':
                 $this->updateTudu($query);
                 break;
             case 'review':
                 $this->reviewTudu($query);
                 break;
             case 'reply':
                 $this->reply($query);
                 break;
             case 'confirm':
                 $this->doneTudu($query);
                 break;
             case 'filter':
                 $this->filterTudu($query);
                 break;
             case 'rule':
                 $this->updateRules($query);
                 break;
             case 'cycle':
                 $this->cycle($query);
                 break;
             default:
                 $this->getLogger()->info("Invalid action values {$action}");
                 break;
         }
     } while (true);
 }
Esempio n. 8
0
 /**
  * 执行讨论数据处理
  */
 public function run()
 {
     $today = date('Y-m-d');
     foreach ($this->_dbs as $key => $db) {
         $tsId = (int) str_replace('ts', '', $key);
         // 会议提醒
         $sql = 'SELECT T.tudu_id, T.org_id, T.subject, T.from, T.start_time, M.is_allday, M.location FROM td_tudu AS T ' . 'LEFT JOIN td_tudu_meeting M ON T.tudu_id = M.tudu_id ' . 'WHERE type = \'meeting\' ' . 'AND T.is_draft = 0 ' . 'AND T.is_done = 0 ' . 'AND M.notify_time >= UNIX_TIMESTAMP() - 120 ' . 'AND M.notify_time <= UNIX_TIMESTAMP() + 60 ' . 'AND is_notified = 0';
         Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $db, true);
         $manager = Tudu_Tudu_Manager::getInstance();
         $meetings = $db->fetchAll($sql);
         $daoLog = Tudu_Dao_Manager::getDao('Dao_Td_Log_Log', Tudu_Dao_Manager::DB_TS);
         foreach ($meetings as $item) {
             $tuduId = $item['tudu_id'];
             $users = $db->fetchAll("SELECT accepter_info, role, is_foreign FROM td_tudu_user WHERE tudu_id = '{$tuduId}' AND role = 'to' AND tudu_status < 3");
             $flag = true;
             // 记录提醒人员
             $notifyTo = array();
             $mailTo = array();
             foreach ($users as $row) {
                 list($email, ) = explode(' ', $row['accepter_info']);
                 if (!$row['is_foreign']) {
                     $notifyTo[] = $email;
                 } else {
                     if (Oray_Function::isEmail($email)) {
                         $mailTo[] = $email;
                     }
                 }
             }
             // 发送talk提醒
             if (count($notifyTo)) {
                 $this->sendNotify($item, $notifyTo);
             }
             // 发送外部提醒(Email)
             if (count($mailTo)) {
                 $this->sendMail($tsId, $item, $mailTo);
             }
             $db->query("UPDATE td_tudu_meeting SET is_notified = 1 WHERE tudu_id = '{$tuduId}'");
             $this->getLogger()->info("Meeting id:({$tuduId}) notify success");
         }
         // 过期会议自动结束
         $sql = 'SELECT T.tudu_id, T.org_id, T.cycle_id, M.is_allday, T.end_time FROM td_tudu AS T ' . 'LEFT JOIN td_tudu_meeting M ON T.tudu_id = M.tudu_id ' . 'WHERE type = \'meeting\' ' . 'AND is_draft = 0 ' . 'AND is_done  = 0 ' . 'AND (end_time < UNIX_TIMESTAMP() OR end_time IS NULL)';
         $records = $db->fetchAll($sql);
         foreach ($records as $record) {
             $orgId = $record['org_id'];
             $tuduId = $record['tudu_id'];
             $endTime = (int) $record['end_time'];
             if ($record['is_allday'] && date('Y-m-d', $endTime) == $today) {
                 continue;
             }
             if (!$manager->updateTudu($tuduId, array('isdone' => true))) {
                 $this->getLogger()->info("Meeting id:({$tuduId}) done failure");
                 continue;
             }
             // 成功记录操作日志
             $daoLog->createLog(array('orgid' => $orgId, 'targettype' => Dao_Td_Log_Log::TYPE_TUDU, 'targetid' => $tuduId, 'uniqueid' => '^system', 'action' => Dao_Td_Log_Log::ACTION_TUDU_DONE, 'detail' => serialize(array('isdone' => true)), 'logtime' => time()));
             $users = $manager->getTuduUsers($tuduId);
             foreach ($users as $user) {
                 // 移出图度箱
                 $ret = $manager->deleteLabel($tuduId, $user['uniqueid'], '^i');
                 $ret = $manager->deleteLabel($tuduId, $user['uniqueid'], '^a');
             }
             // 周期任务
             if (!empty($record['cycle_id'])) {
                 if (!$this->cycle($tsId, $tuduId, $record['cycle_id'])) {
                     $this->getLogger()->warn("Meeting id:({$tuduId}) cycle failure");
                 }
             }
             $this->getLogger()->info("Meeting id:({$tuduId}) done success");
         }
         $this->getLogger()->info("Ts db:({$key}) process complete");
     }
 }
Esempio n. 9
0
 /**
  * 初始化
  */
 public function init()
 {
     $this->bootstrap = $this->getInvokeArg('bootstrap');
     $this->multidb = $this->bootstrap->getResource('multidb');
     $this->cache = $this->bootstrap->getResource('memcache');
     $this->options = $this->bootstrap->getOptions();
     $this->_user = Tudu_User::getInstance();
     $this->_timestamp = time();
     if (Zend_Session::sessionExists() || !empty($this->_sessionId)) {
         if (!$this->session) {
             $this->session = new Zend_Session_Namespace(self::SESSION_NAMESPACE, false);
         }
         $this->_sessionId = Zend_Session::getId();
         do {
             // 登陆信息验证
             $names = $this->options['cookies'];
             if (!isset($this->session->auth) || !$this->_request->getCookie($names['username'])) {
                 $this->_destroySession();
                 break;
             }
             if (isset($this->session->auth['referer'])) {
                 $this->_refererUrl = $this->session->auth['referer'];
             }
             if ($this->session->auth['username'] != $this->_request->getCookie($names['username'])) {
                 $this->_destroySession();
                 break;
             }
             $this->session->auth['lasttime'] = $this->_timestamp;
             $this->_user->init($this->session->auth);
             if (!$this->_user->isLogined()) {
                 $this->_destroySession();
             }
             // 体验帐号
             if (in_array($this->_user->orgId, array('win', 'tuduoffice'))) {
                 $this->session->isdemo = true;
             }
             if ($this->_user->orgId == 'online-app') {
                 header('P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”');
             }
             $this->org = $this->getOrg($this->_user->orgId);
             $this->_user->setOptions(array('timezone' => !empty($this->org['timezone']) ? $this->org['timezone'] : 'Etc/GMT-8', 'dateformat' => !empty($this->org['dateformat']) ? $this->org['dateformat'] : '%Y-%m-%d %H:%M:%S', 'passwordlevel' => $this->org['passwordlevel'], 'skin' => $this->org['skin']));
             if (!empty($this->_user->option['language'])) {
                 Tudu_Lang::getInstance()->setLanguage($this->_user->option['language']);
             }
             // 禁止访问
             if (Dao_Md_Org_Org::STATUS_FORBID == $this->org['status']) {
                 $controllerName = $this->_request->getControllerName();
                 if ($controllerName != 'forbid') {
                     $this->jump('/forbid');
                 }
             }
             // 设置默认时区
             if (!empty($this->_user->option['timezone'])) {
                 date_default_timezone_set($this->_user->option['timezone']);
             }
             // 注册TS数据库
             Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $this->multidb->getDb('ts' . $this->org['tsid']), true);
         } while (false);
     } else {
         $authId = $this->_request->getCookie($this->options['cookies']['auth']);
         if (!empty($authId)) {
             $query = $this->_request->getServer('HTTP_QUERY_STRING');
             return $this->jump($this->options['sites']['www'] . '/login/auto?referer=%referer', array(), array('referer' => true));
         }
     }
     $this->view->version = self::TUDU_VERSION;
     $this->view->user = $this->_user->toArray();
     $this->view->options = array('sites' => $this->options['sites'], 'tudu' => $this->options['tudu']);
 }
Esempio n. 10
0
 /**
  * 清除过期回复
  */
 public function cleanAutoSavePost($db)
 {
     $cleanDays = 7;
     $date = $cleanDays > 0 ? strtotime('-' . $cleanDays . ' days') : strtotime('today');
     $sql = 'SELECT post_id, tudu_id FROM td_post WHERE is_first = 0 AND is_send = 0 AND create_time < ' . $date;
     $posts = $db->fetchAll($sql);
     Tudu_Dao_Manager::setDb(Tudu_Dao_Manager::DB_TS, $db, true);
     $manager = Tudu_Tudu_Manager::getInstance();
     foreach ($posts as $post) {
         $ret = $manager->deletePost($post['tudu_id'], $post['post_id']);
         if (!$ret) {
             $this->getLogger()->warn("Notice id:({$post['post_id']}) Delete Failured");
             continue;
         }
         $this->getLogger()->info("Post id:({$post['post_id']}) Delete success");
     }
 }