/** * 执行讨论数据处理 */ 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"); } }
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')); }
/** * */ 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"); }
/** * 执行讨论数据处理 */ 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"); } }
/** * 执行 */ 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); }
/** * * @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"); } }
/** * 执行 */ 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); }
/** * 执行讨论数据处理 */ 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"); } }
/** * 初始化 */ 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']); }
/** * 清除过期回复 */ 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"); } }