Example #1
0
 /**
  * 用户名密码验证流程
  *
  * @param array $inputData
  */
 public function grant(array $inputData)
 {
     if (empty($inputData[OpenApi_OAuth_OAuth::PARAM_USERNAME]) || empty($inputData[OpenApi_OAuth_OAuth::PARAM_PASSWORD])) {
         require_once 'OpenApi/OAuth/Exception.php';
         throw new OpenApi_OAuth_Exception("Invalid parameter for grant accessToken by type \"password\"", OpenApi_OAuth_OAuth::ERROR_INVALID_REQUEST);
     }
     try {
         $auth = new Tudu_Auth_Adapter_User(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD));
         $auth->setUsername($inputData[OpenApi_OAuth_OAuth::PARAM_USERNAME])->setPassword($inputData[OpenApi_OAuth_OAuth::PARAM_PASSWORD]);
         $result = $auth->authenticate();
     } catch (Tudu_Auth_Adapter_Exception $e) {
         require_once 'OpenApi/OAuth/Exception.php';
         throw new OpenApi_OAuth_Exception("Authorize failed", OpenApi_OAuth_OAuth::ERROR_INVALID_REQUEST);
     }
     if (!$result->isValid()) {
         require_once 'OpenApi/OAuth/Exception.php';
         throw new OpenApi_OAuth_Exception("Authorize failed", OpenApi_OAuth_OAuth::ERROR_INVALID_REQUEST);
     }
     $identity = $result->getIdentity();
     $identity['logintime'] = time();
     return array(OpenApi_OAuth_OAuth::PARAM_USER_ID => $inputData[OpenApi_OAuth_OAuth::PARAM_USERNAME], OpenApi_OAuth_OAuth::PARAM_SCOPE => null, 'auth' => $identity);
 }
Example #2
0
 /**
  * 外发会议
  *
  * @param array $params
  */
 public function sendMeeting($params)
 {
     if (empty($params['tuduid']) || empty($params['tsid']) || empty($params['uniqueid']) || empty($params['from']) || empty($params['content']) || empty($params['location'])) {
         return;
     }
     $tuduId = $params['tuduid'];
     $uniqueId = $params['uniqueid'];
     $tsId = $params['tsid'];
     $to = !empty($params['to']) ? explode(',', $params['to']) : null;
     $sender = $params['from'];
     $content = $params['content'];
     $location = $params['location'];
     /* @var $manager Tudu_Tudu_Manager */
     $manager = Tudu_Tudu_Manager::getInstance(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS));
     $tudu = $manager->getTuduById($tuduId, $uniqueId);
     if (null == $tudu) {
         $this->getLogger()->warn("Tudu id:{$tuduId} is not exists");
         return;
     }
     // 获取接收人
     $receivers = $manager->getTuduUsers($tudu->tuduId);
     $emails = array();
     /* @var $daoContact Dao_Td_Contact_Contact */
     $daoContact = Tudu_Dao_Manager::getDao('Dao_Td_Contact_Contact', Tudu_Dao_Manager::DB_TS);
     // 处理接收人数据
     foreach ($receivers as $receiver) {
         $info = explode(' ', $receiver['accepterinfo'], 3);
         $email = $info[0];
         $name = !empty($info[1]) ? $info[1] : null;
         $contactId = isset($info[2]) ? $info[2] : null;
         if ($name == null && $email) {
             $arr = explode('@', $email);
             $name = array_shift($arr);
         }
         if (!$email && !$name) {
             continue;
         }
         if (!empty($to) && !in_array($email, $to)) {
             continue;
         }
         if ($receiver['isforeign']) {
             $auth = $receiver['authcode'];
             if (Oray_Function::isEmail($email) && $uniqueId != $receiver['uniqueid']) {
                 $array = array('address' => $email, 'name' => $name, 'authinfo' => '', 'url' => 'http://' . $tudu->orgId . '.com/foreign/tudu?ts=' . $tsId . '&tid=' . $tudu->tuduId . '&fid=' . $receiver['uniqueid']);
                 if ($auth) {
                     $array['authinfo'] = '<p style="margin:10px 0">打开任务链接后需要输入以下验证码:<strong style="color:#f00">' . $auth . '</strong></p>';
                 }
                 $emails[] = $array;
             }
         }
     }
     // 执行外发
     $tpl = $this->_options['data']['path'] . '/templates/tudu/mail_meeting_notify.tpl';
     if (!file_exists($tpl) || !is_readable($tpl)) {
         $this->getLogger()->warn("Tpl file:\"mail_meeting_notify.tpl\" is not exists");
         return;
     }
     // 公用信息
     $common = array('subject' => $tudu->subject, 'sender' => $sender, 'lastupdate' => date('Y-m-d H:i:s', $tudu->lastPostTime), 'content' => mb_substr(strip_tags($content), 0, 20, 'utf-8'), 'type' => $this->_typeNames[$tudu->type]);
     $mailTransport = $this->getMailTransport($this->_balancer->select());
     $template = $this->_assignTpl(file_get_contents($tpl), $common);
     foreach ($emails as $email) {
         try {
             $mail = new Zend_Mail('utf-8');
             $mail->setFrom($this->_options['smtp']['from']['alert'], urldecode($this->_options['smtp']['fromname']));
             $mail->addTo($email['address'], $email['name']);
             $mail->addHeader('tid', $tudu->tuduId);
             $mail->setSubject("图度{$this->_typeNames[$tudu->type]}——" . $tudu->subject . '[会议提醒]');
             $mail->setBodyHtml($this->_assignTpl($template, $email));
             $mail->send($mailTransport);
         } catch (Zend_Mail_Exception $ex) {
             $this->getLogger()->warn("[Failed] Email send type:{$this->_typeNames[$tudu->type]} TuduId:{$tuduId} retry\n{$ex}");
             continue;
         }
     }
     $this->getLogger()->debug("Send Meeting id:{$tuduId} done");
 }
Example #3
0
 /**
  * 接收参数,通过接口方 OpenApi 进行验证
  * 登录图度
  */
 public function indexAction()
 {
     $query = $this->_request->getQuery();
     $config = $this->getInvokeArg('bootstrap')->getOptions();
     $multidb = $this->getInvokeArg('bootstrap')->getResource('multidb');
     $time = time();
     Tudu_Dao_Manager::setDbs(array(Tudu_Dao_Manager::DB_TS => $multidb->getDb('ts1')));
     // 缺少验证接口标识参数
     if (empty($query['from'])) {
         return $this->_redirect('http://www.tudu.com/');
     }
     $from = $query['from'];
     $className = 'Model_OpenApi_' . ucfirst($query['from']);
     $classFile = 'Model/OpenApi/' . ucfirst($query['from']) . '.php';
     // 缺少配置参数
     if (empty($config['openapi'][strtolower($from)])) {
         return $this->_redirect('http://www.tudu.com/');
     }
     $params = array_merge($config['openapi'][strtolower($from)], $query);
     header('P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”');
     try {
         require_once $classFile;
         // 进行登录验证
         call_user_func(array($className, 'auth'), $params);
         // 查找应用组织关联表
         $daoAssociate = Tudu_Dao_Manager::getDao('Dao_Md_Org_Associate', Tudu_Dao_Manager::DB_MD);
         // 获取用户信息
         $params = array_merge($config['openapi'][strtolower($from)], array('uid' => $query['uu_id']));
         $userInfo = call_user_func(array($className, 'getUserInfo'), $params);
         $orgId = $daoAssociate->getOrgIdByUid($from, $userInfo['uid']);
         if (false === $orgId) {
             $orgId = $this->_getOrgId($from);
             // 创建组织
             require_once 'Model/Org/Org.php';
             Model_Org_Org::setResource('config', $config);
             Model_Org_Org::createOrg($orgId, array('userid' => 'admin', 'password' => md5(Oray_Function::randKeys(16)), 'truename' => $userInfo['truename'], 'orgname' => $userInfo['orgname']));
             // 创建关联
             $daoAssociate->createAssociate(array('orgid' => $orgId, 'from' => $from, 'uid' => $userInfo['uid'], 'truename' => $userInfo['truename'], 'email' => $userInfo['email'], 'mobile' => $userInfo['mobile'], 'tel' => $userInfo['tel'], 'createtime' => time()));
         }
         // 获取用户信息
         $adapter = new Tudu_Auth_Adapter_User(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD));
         $adapter->setUsername('admin@' . $orgId)->setAuto(true);
         $result = $adapter->authenticate();
         $names = $config['cookies'];
         if (!$result->isValid()) {
             $this->_setCookies(array($names['auth'] => false, $names['username'] => false));
             return $this->_redirect('http://www.tudu.com/');
         }
         $identity = $result->getIdentity();
         // 登录
         if (Zend_Session::isStarted()) {
             session_unset();
             Zend_Session::namespaceUnset(self::SESSION_NAMESPACE);
             Zend_Session::regenerateId();
         }
         $session = new Zend_Session_Namespace(self::SESSION_NAMESPACE, true);
         $session->auth = array_merge($identity, array('logintime' => $time));
         $session->auth['appinvoker'] = $from;
         // 验证相关的Cookies
         $this->_setCookies(array($names['username'] => $identity['username'], $names['server'] => $orgId . '.tudu.com'), null);
         // 其它场合要用到的Cookies,永久。
         $this->_setCookies(array($names['track'] => base64_encode('http://www.tudu.com/login')), $time + 86400 * 365);
         // 同时要登录后台
         $adapter = new Tudu_Auth_Adapter_Admin(array('db' => Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD)));
         $adapter->setUsername($identity['username'])->setAuto(true);
         $result = $adapter->authenticate();
         if ($result->isValid()) {
             $session->admin = array_merge($result->getIdentity(), array('logintime' => $time));
         }
         // 操作失败
     } catch (Exception $e) {
         return $this->_redirect('http://www.tudu.com/');
     }
     return $this->_redirect('http://online-app.tudu.com/frame-inc/');
 }
Example #4
0
 /**
  * 获取Dao实例
  *
  * @param string $className
  * @param Zend_Db_Adapter_Abstract $db
  * @return Oray_Dao_Abstract
  */
 public function getDao($className, Zend_Db_Adapter_Abstract $db = null)
 {
     if (!isset($this->_dao[$className])) {
         if (null === $db) {
             $db = Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::TS);
         }
         $this->_dao[$className] = Tudu_Dao_Manager::getDao($className, $db);
     }
     return $this->_dao[$className];
 }
Example #5
0
 /**
  * 发送回复
  */
 public function sendAction()
 {
     $params = $this->_request->getParams();
     // 处理附件图片
     $content = !empty($params['content']) ? nl2br($params['content']) : '';
     $attachments = array();
     if (isset($params['image'])) {
         $images = $params['image'];
         if (!is_array($params['image'])) {
             $images = explode(',', $images);
         }
         foreach ($images as $fileId) {
             if (!$fileId) {
                 continue;
             }
             if (false !== strpos($fileId, ',')) {
                 $arr = explode(',', $fileId);
                 foreach ($arr as $fid) {
                     $attachments[] = $fid;
                     $fid = str_replace('AID:', '', $fid);
                     $content .= '<br /><img src="AID:' . $fid . '" _aid="' . $fid . '" />';
                 }
                 continue;
             }
             $attachments[] = $fileId;
             $fileId = str_replace('AID:', '', $fileId);
             $content .= '<br /><img src="AID:' . $fileId . '" _aid="' . $fileId . '" />';
         }
     }
     $attrs = array('tuduid' => isset($params['tuduid']) ? $params['tuduid'] : null, 'content' => $content, 'percent' => isset($params['percent']) ? max(0, (int) $params['percent']) : null, 'elapsedtime' => isset($params['elapsedtime']) ? (double) $params['elapsedtime'] * 3600 : null);
     $attrs['header'] = array('client-type' => 'iOS');
     if (isset($params['postid'])) {
         $attrs['postid'] = $params['postid'];
     }
     if ((!empty($params['reference']) || !empty($params['reply'])) && !empty($params['tuduid'])) {
         $refId = !empty($params['reference']) ? $params['reference'] : $params['reply'];
         $isRef = !empty($params['reference']);
         $sql = "SELECT post_id AS postid, poster FROM td_post WHERE tudu_id = :tuduid AND is_send = 1 ORDER BY create_time ASC";
         $db = Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS);
         $posts = $db->fetchAll($sql, array('tuduid' => $params['tuduid']));
         $floor = 0;
         $poster = null;
         foreach ($posts as $item) {
             if ($item['postid'] == $refId) {
                 $poster = $item['poster'];
                 break;
             }
             $floor++;
         }
         $floorText = $floor == 1 ? '楼主' : $floor . '楼';
         if ($poster) {
             if ($isRef) {
                 $sql = "SELECT content FROM td_post WHERE tudu_id = :tuduid AND post_id = :postid";
                 $refPost = $db->fetchRow($sql, array('tuduid' => $params['tuduid'], 'postid' => $refId));
                 if ($refPost) {
                     $refContent = '<div class="cite_wrap">' . '<strong>引用:</strong><span class="floor_f">' . $poster . '</span><a class="floor_f" style="margin-left:5px;" href="javascript:void(0)" _jumpfloor="' . $floor . '|' . $refId . '">' . $floorText . '</a>' . '<div>' . $refPost['content'] . '</div>' . '</div>';
                     $attrs['content'] = $refContent . $attrs['content'];
                 }
             } else {
                 $refContent = '<div class="cite_wrap">' . '<p>' . '<strong>回复</strong><a class="floor_f" style="margin:0 5px;" href="javascript:void(0)" _jumpfloor="FLOOR:' . $floor . '|' . $refId . '" _initfloor="' . $floor . '">' . $floorText . '</a> ' . '<span class="floor_f" style="margin-left:5px;">' . $poster . '</span>' . '</p>' . '</div>';
                 $attrs['content'] = $refContent . $attrs['content'];
             }
         }
     }
     $modelPost = Tudu_Model::factory('Model_Tudu_Post_Compose');
     try {
         require_once 'Model/Tudu/Post.php';
         $post = new Model_Tudu_Post($attrs);
         if (count($attachments)) {
             foreach ($attachments as $fid) {
                 $post->addAttachment($fid, false);
             }
         }
         $modelPost->execute('send', array(&$post));
     } catch (Model_Tudu_Exception $e) {
         $code = TuduX_OpenApi_ResponseCode::SYSTEM_ERROR;
         switch ($e->getCode()) {
             case Model_Tudu_Exception::TUDU_NOTEXISTS:
             case Model_Tudu_Exception::POST_NOTEXISTS:
                 $code = TuduX_OpenApi_ResponseCode::RESOURCE_NOT_EXISTS;
                 break;
             case Model_Tudu_Exception::TUDU_IS_DONE:
                 $code = TuduX_OpenApi_ResponseCode::TUDU_CLOSED;
                 break;
             case Model_Tudu_Exception::PERMISSION_DENIED:
                 $code = TuduX_OpenApi_ResponseCode::ACCESS_DENIED;
                 break;
             case Model_Tudu_Exception::MISSING_PARAMETER:
                 $code = TuduX_OpenApi_ResponseCode::MISSING_PARAMETER;
                 break;
             default:
         }
         throw new TuduX_OpenApi_Exception($e->getMessage(), $code);
     }
     $this->view->code = TuduX_OpenApi_ResponseCode::SUCCESS;
     $this->view->postid = $post->postId;
 }
Example #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");
     }
 }
Example #7
0
 /**
  * 更新图度规则
  * @param $params
  */
 public function updateRules($params)
 {
     if (empty($params['ruleid']) || empty($params['tsid'])) {
         return;
     }
     $ruleId = $params['ruleid'];
     $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);
     $rule = $daoRule->getRuleById($ruleId);
     if ($rule == null) {
         $this->getLogger()->warn("Tudu Rule id: {$ruleId} is not exists");
         return;
     }
     $uniqueId = $rule->uniqueId;
     $filters = $rule->getFilters()->toArray();
     if (count($filters) <= 0) {
         $this->getLogger()->warn("Tudu Rule->getFilters() null ruleid: {$ruleId} is not exists");
         return;
     }
     $subject = null;
     $subjectType = ' LIKE ';
     foreach ($filters as $key => $filter) {
         if ($filter['what'] == 'subject') {
             $subject = $filter['value'];
             if ($filter['type'] != 'contain') {
                 $subjectType = ' NOT LIKE ';
             }
             unset($filters[$key]);
             break;
         }
     }
     $tsdb = Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS);
     // 过滤现有tudu
     if ($rule->isValid) {
         $sql = 'SELECT t.tudu_id AS tuduid, `from`, `to`, `cc`, `subject` FROM td_tudu t ' . 'LEFT JOIN td_tudu_user tu ON t.tudu_id = tu.tudu_id ' . 'WHERE tu.unique_id = ' . $tsdb->quote($uniqueId) . ' AND tu.labels IS NOT NULL ';
         if ($subject) {
             $sql .= ' AND t.subject ' . $subjectType . $tsdb->quote('%' . $subject . '%');
         }
         $query = $tsdb->query($sql);
         while ($row = $query->fetch()) {
             $match = false;
             if (count($filters)) {
                 $filterCount = count($filters);
                 $matchCount = 0;
                 // 检查发送人,接收人,抄送人
                 foreach ($filters as $filter) {
                     $contain = false;
                     if (in_array($filter['what'], array('from', 'to', 'cc'))) {
                         if (is_array($filter['value'])) {
                             $vc = count($filter['value']);
                             $mc = 0;
                             $arr = explode("\n", $row[$filter['what']]);
                             $users = array();
                             foreach ($arr as $item) {
                                 $item = explode(' ', $item);
                                 $users[$item[0]] = $item[1];
                             }
                             foreach ($filter['value'] as $value) {
                                 $value = str_replace(array('oray.com', 'tudu.com'), array('oray', ''), $value);
                                 if (isset($users[$value])) {
                                     if ($filter['what'] == 'from' && $filter['type'] == 'contain') {
                                         $matchCount++;
                                         continue 2;
                                     }
                                     $mc++;
                                 }
                             }
                             if ($vc == $mc) {
                                 $contain = true;
                             }
                         }
                     } elseif ($filter['what'] == 'subject') {
                         $contain = false !== strpos($tudu['subject'], $filter->value);
                     }
                     if ($contain && $filter['type'] == 'contain' || !$contain && $filter['type'] == 'exclusive') {
                         $matchCount++;
                     }
                 }
                 if ($filterCount == $matchCount && $matchCount > 0) {
                     $match = true;
                 }
             } else {
                 $match = true;
             }
             // 匹配过滤条件,执行规则操作
             if ($match) {
                 // 标签
                 if ($rule->operation == 'label') {
                     $manager->addLabel($row['tuduid'], $uniqueId, $rule->value);
                     // 忽略
                 } elseif ($rule->operation == 'ignore') {
                     $manager->deleteLabel($row['tuduid'], $uniqueId, '^i');
                     $manager->addLabel($row['tuduid'], $uniqueId, '^g');
                     // 星标
                 } elseif ($rule->operation == 'starred') {
                     $manager->addLabel($row['tuduid'], $uniqueId, '^t');
                 }
             }
         }
     }
     $this->getLogger()->debug("Rule id:{$ruleId} done");
 }
Example #8
0
 /**
  * 刷新im服务器缓存
  *
  * @param string $orgId
  */
 protected function _refreshCastCache($orgId)
 {
     /* @var $db Zend_Db_Adapter_Abstract */
     $db = Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD);
     // 读取所有用户列表
     $userSql = "SELECT * FROM ((" . "SELECT u.org_id, u.`status`, u.dept_id, u.user_id, u.unique_id, ui.true_name, ui.pinyin, ui.update_time, 0 AS usertype " . "FROM md_user AS u " . "LEFT JOIN md_user_info AS ui ON u.org_id = ui.org_id AND u.user_id = ui.user_id " . "WHERE u.org_id = :orgid) UNION ALL (" . "SELECT org_id, 1 AS `status`, '' AS dept_id, user_id, unique_id, true_name, pinyin, update_time, 1 AS usertype FROM v_cast_common_user)) AS T";
     $users = $db->fetchAll($userSql, array('orgid' => $orgId));
     /*
             // 读取所有部门
             $deptSql = "SELECT org_id, dept_id, dept_name, IF(parent_dept_id = '^root', NULL, parent_dept_id) AS parent_dept_id, order_num "
                      . "FROM md_department WHERE org_id = :orgid AND dept_id <> '^root'";
     
             $depts = $db->fetchAll($deptSql, array('orgid' => $orgId));
     
             // 读取组织所有匹配规则
             $castUserSql = "SELECT org_id, owner_id, user_id FROM md_cast_disable_user WHERE org_id = :orgid";
             $castDeptSql = "SELECT org_id, owner_id, dept_id FROM md_cast_disable_dept WHERE org_id = :orgid";
     
             $res = $db->query($castUserSql, array('orgid' => $orgId));
             $castUsers = array();
             while (($row = $res->fetch())) {
                 $castUsers[$row['owner_id']][] = $row['user_id'];
             }
             $res->closeCursor();
     
             $res = $db->query($castDeptSql, array('orgid' => $orgId));
             $castDepts = array();
             while (($row = $res->fetch())) {
                 $castDepts[$row['owner_id']][] = $row['dept_id'];
             }
             $res->closeCursor();
     
             unset($res);
     */
     // 更新各用户好友列表
     foreach ($users as $user) {
         // 跳过公共用户
         if (1 == $user['usertype']) {
             continue;
         }
         /*
                     $d = isset($castDepts[$user['user_id']]) ? $castDepts[$user['user_id']] : array();
                     $u = isset($castUsers[$user['user_id']]) ? $castUsers[$user['user_id']] : array();
         
                     // 更新当前用户部门列表缓存
                     $contentDepts = array();
         
                     foreach ($depts as $dept) {
                         if (in_array($dept['dept_id'], $d)) {
                             continue ;
                         }
         
                         $str = "<item id='{$dept['dept_id']}' name='{$dept['dept_name']}' orgid='{$dept['org_id']}'";
                         if (!empty($dept['parent_dept_id'])) {
                             $str .= " parentid='{$dept['parent_dept_id']}'";
                         }
                         $str .= ' />';
         
                         $contentDepts[] = $str;
                     }
         
                     $contentDepts = '<dept>' . implode('', $contentDepts) . '</dept>';
                     $this->_memcache->set('im_' . $orgId . '_' . $user['user_id'] . '_depts', $contentDepts, null, null, true);
         
                     // 更新用户列表缓存
                     $contentUsers = array();
                     foreach ($users as $du) {
                         if (in_array($du['user_id'], $u) && 0 == $du['usertype']) {
                             continue ;
                         }
         
                         $contentUsers[] = "<user userid='{$du['user_id']}' usertype='{$du['usertype']}' orgid='{$du['org_id']}' deptid='{$du['dept_id']}' "
                                         . "name='{$du['true_name']}' host='{$du['org_id']}' updatetime='{$du['update_time']}' satus='{$du['status']}' />";
                     }
                     $contentUsers = '<Roster>' . implode('', $contentUsers) . '</Roster>';
         
                     $this->_memcache->set('im_' . $orgId . '_' . $user['user_id'] . '_roster', $contentUsers, null, null, true);
         
                     $this->_memcache->delete('TUDU-APP-ROLES-' . $user['user_id'] . '@' . $orgId);
         */
         $this->_memcache->delete('im_' . $user['org_id'] . '_' . $user['user_id'] . '_depts');
         $this->_memcache->delete('im_' . $user['org_id'] . '_' . $user['user_id'] . '_roster');
         $this->getLogger()->debug("refresh cache of {$user['user_id']}@{$orgId}");
         //unset($conentDepts, $contentUsers, $d, $u);
     }
     //unset($users, $castUsers, $castDepts, $depts);
 }
Example #9
0
 /**
  * 管理员登录流程
  *
  * /login/login-admin
  */
 public function loginAdminAction()
 {
     // 未登录前台
     if (!$this->_user->isLogined()) {
         $referer = $this->options['sites']['www'];
         if (!empty($this->session->auth['referer'])) {
             $referer = $this->session->auth['referer'];
         }
         return $this->referer($referer);
     }
     // 非管理员身份
     if (!$this->_user->isAdmin() && !$this->_user->isOwner()) {
         PROTOCOL . '//' . $this->getServer($this->_user->orgId) . '/admin/login/?err=timeout';
     }
     $email = $this->_request->getPost('email');
     $password = $this->_request->getPost('password');
     $seccode = $this->_request->getPost('seccode');
     $error = null;
     do {
         if (empty($email)) {
             $error = 'invalid email';
             break;
         }
         if (empty($password)) {
             $error = 'invalid password';
             break;
         }
         if (empty($seccode)) {
             $error = 'unvalid seccode';
             break;
         }
         if (!Oray_Seccode::isValid($seccode, 'adlogin')) {
             $error = 'invalid seccode';
             break;
         }
         Oray_Seccode::clear('adlogin');
         $adapter = new Tudu_Auth_Adapter_Admin(array('db' => Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD)));
         $adapter->setUsername($email)->setPassword($password);
         $result = $adapter->authenticate();
         if (!$result->isValid()) {
             $message = $result->getMessages();
             $error = isset($message[0]) ? $message[0] : 'failure';
             break;
         }
     } while (false);
     if (null !== $error) {
         return $this->referer(PROTOCOL . '//' . $this->getServer($this->_user->orgId) . '/admin/login/?err=' . $error);
     }
     $this->session->admin = array_merge($result->getIdentity(), array('logintime' => time()));
     //$this->_user->initAdmin($this->session->admin);
     // 添加登入日志
     $daoLog = Tudu_Dao_Manager::getDao('Dao_Md_Log_Oplog', Tudu_Dao_Manager::DB_MD);
     $clientIp = isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $this->_request->getClientIp();
     $ret = $daoLog->createAdminLog(array('orgid' => $this->_user->orgId, 'userid' => $this->_user->userId, 'ip' => $clientIp, 'module' => Dao_Md_Log_Oplog::MODULE_LOGIN, 'action' => Dao_Md_Log_Oplog::OPERATION_LOGIN, 'subaction' => null, 'target' => implode(':', array($this->_user->orgId, $this->_user->address, $this->_user->uniqueId)), 'local' => !empty($this->session->auth['local']) ? $this->session->auth['local'] : null, 'detail' => serialize(array('account' => $this->_user->userName))));
     return $this->referer(PROTOCOL . '//' . $this->getServer($this->_user->orgId) . '/admin/');
 }
Example #10
0
 /**
  * 创建组织超级管理员
  *
  * @param array $params
  */
 public function createAdmin(array $params)
 {
     //echo 'create admin', "\n";
     /* @var $daoUser Dao_Md_User_User */
     $daoUser = Tudu_Dao_Manager::getDao('Dao_Md_User_User', Tudu_Dao_Manager::DB_MD);
     if (empty($params['userid'])) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Missing or invalid value of parameter "uid"', self::CODE_INVALID_UID);
     }
     if (empty($params['orgid'])) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Missing or invalid value of parameter "orgid"', self::CODE_INVALID_ORGID);
     }
     if (empty($params['password'])) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Missing or invalid value of parameter "password"', self::CODE_INVALID_PWD);
     }
     $orgId = $params['orgid'];
     $userId = $params['userid'];
     $password = $params['password'];
     $trueName = $params['truename'];
     $uniqueId = Dao_Md_User_User::getUniqueId($orgId, $userId);
     /* @var $daoUser Dao_Md_User_User */
     $daoUser = Tudu_Dao_Manager::getDao('Dao_Md_User_User', Tudu_Dao_Manager::DB_MD);
     /* @var $daoGroup Dao_Md_User_Group */
     $daoGroup = Tudu_Dao_Manager::getDao('Dao_Md_User_Group', Tudu_Dao_Manager::DB_MD);
     /* @var $daoRole Dao_Md_User_Role */
     $daoRole = Tudu_Dao_Manager::getDao('Dao_Md_User_Role', Tudu_Dao_Manager::DB_MD);
     /* @var $daoOrg Dao_Md_Org_Org*/
     $daoOrg = Tudu_Dao_Manager::getDao('Dao_Md_Org_Org', Tudu_Dao_Manager::DB_MD);
     $org = $daoOrg->getOrgById($orgId);
     if (!$org) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Org id "' . $orgId . '" not exists', self::CODE_ORG_NOTEXISTS);
     }
     // 创建超级管理员用户
     $user = array('orgid' => $orgId, 'userid' => $userId, 'uniqueid' => $uniqueId, 'status' => 1, 'isshow' => 1);
     $userInfo = array('orgid' => $orgId, 'userid' => $userId, 'truename' => $trueName, 'ismd5' => true, 'password' => $password);
     $ret = $daoUser->createUser($user);
     if (!$ret) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Create user data failed', self::CODE_SAVE_FAILED);
     }
     $ret = $daoUser->createUserInfo($userInfo);
     if (!$ret) {
         require_once 'Model/Org/Exception.php';
         throw new Model_Org_Exception('Create user info failed', self::CODE_SAVE_FAILED);
     }
     // 添加群组 - 全体员工
     $daoGroup->addUser($orgId, '^all', $userId);
     // 添加权限 - 管理员
     $daoRole->addUsers($orgId, '^admin', $userId);
     // 添加管理员
     $daoOrg->addAdmin($orgId, $userId, 'SA', 3);
     if (!empty($params['email'])) {
         // 绑定邮箱
         $daoUser->createEmail(array('orgid' => $orgId, 'userid' => $userId, 'email' => $params['email']));
     }
     /* @var $daoCast Dao_Md_User_Cast */
     $daoCast = Tudu_Dao_Manager::getDao('Dao_Md_User_Cast', Tudu_Dao_Manager::DB_MD);
     // 看到自己
     $daoCast->addUser($orgId, $userId, $userId);
     // 看到根部门
     $daoCast->addDepartment($orgId, $userId, '^root');
     // 创建欢迎公告
     try {
         $config = Tudu_Model::getResource('config');
         if (!empty($config['path']['data']) || !empty($config['data']['path'])) {
             $tplFile = !empty($config['path']['data']) ? $config['path']['data'] : $config['data']['path'];
             $content = @file_get_contents($tplFile . '/templates/tudu/welcome.tpl');
             if (!empty($content)) {
                 require_once 'Tudu/Deliver.php';
                 $deliver = new Tudu_Deliver(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_TS));
                 $tudu = array('orgid' => $orgId, 'tuduid' => md5($orgId . '-welcome'), 'boardid' => '^system', 'uniqueid' => '^system', 'type' => 'notice', 'subject' => '欢迎使用图度工作管理系统!!', 'email' => '*****@*****.**', 'from' => '^system 图度系统', 'to' => null, 'cc' => null, 'priority' => 0, 'privacy' => 0, 'issend' => 1, 'status' => Dao_Td_Tudu_Tudu::STATUS_UNSTART, 'content' => $content, 'poster' => '图度系统', 'posterinfo' => '', 'lastposter' => '图度系统', 'lastposttime' => time(), 'createtime' => time(), 'attachment' => array());
                 $deliver->createTudu($tudu);
                 $deliver->sendTudu($tudu['tuduid'], array());
                 if (!empty($uniqueId)) {
                     $deliver->addRecipient($tudu['tuduid'], $uniqueId);
                     $deliver->addLabel($tudu['tuduid'], $uniqueId, '^all');
                     $deliver->addLabel($tudu['tuduid'], $uniqueId, '^i');
                     $deliver->addLabel($tudu['tuduid'], $uniqueId, '^n');
                 }
             }
         }
     } catch (Exception $e) {
     }
 }