Example #1
0
 /**
  * 外发图度任务
  *
  * @param array $params
  */
 public function sendTudu($params)
 {
     if (empty($params['tuduid']) || empty($params['tsid']) || empty($params['uniqueid'])) {
         return;
     }
     $tuduId = $params['tuduid'];
     $uniqueId = $params['uniqueid'];
     $tsId = $params['tsid'];
     $to = !empty($params['to']) ? explode(',', $params['to']) : null;
     /* @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;
     }
     // 当前发送人信息
     $sender = $manager->getUser($tuduId, $uniqueId);
     // 获取接收人
     $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'], 2);
         $email = $info[0];
         $name = !empty($info[1]) ? $info[1] : null;
         $unId = $receiver['uniqueid'];
         if ($name == null && $email) {
             $arr = explode('@', $email);
             $name = array_shift($arr);
         }
         if (!$email && !$name) {
             continue;
         }
         if (!empty($to) && !in_array($email, $to)) {
             continue;
         }
         // 发送人联系人处理
         if (!$sender['isforeign']) {
             $condition = array('uniqueid' => $uniqueId, 'contactid' => $unId);
             $contact = $daoContact->getContact($condition);
             // 加入最近联系人
             if (!$email || (array_key_exists($email, $tudu->to) || array_key_exists($email, $tudu->cc) || $tudu->bcc && array_key_exists($email, $tudu->bcc))) {
                 if (null == $contact) {
                     $contactId = $receiver['isforeign'] ? $receiver['uniqueid'] : Dao_Td_Contact_Contact::getContactId();
                     $params = array('contactid' => $unId, 'uniqueid' => $uniqueId, 'fromuser' => $receiver['isforeign'] ? 0 : 1, 'truename' => $name, 'pinyin' => Tudu_Pinyin::parse($name), 'email' => $email, 'lastcontacttime' => time());
                     $contactId = $daoContact->createContact($params);
                     if (!$contactId) {
                         $data = serialize($params);
                         $this->getLogger()->warn("Create Contact failed:{$data}");
                     }
                 } else {
                     $ret = $daoContact->updateContact($contact->contactId, $uniqueId, array('lastcontacttime' => time()));
                     if (!$ret) {
                         $data = serialize(array('contactid' => $contact->contactId, 'uniqueid' => $uniqueId, 'lastcontacttime' => time()));
                         $this->getLogger()->warn("Update Contact failed:{$data}");
                     }
                     $contactId = $contact->contactId;
                 }
             }
         }
         if ($receiver['isforeign']) {
             $auth = $receiver['authcode'];
             if (Oray_Function::isEmail($info[0])) {
                 $array = array('address' => $info[0], 'name' => empty($info[1]) ? $info[1] : $info[0], 'authinfo' => '', 'url' => 'http://' . $tudu->orgId . '.tudu.com/foreign/tudu?ts=' . $tsId . '&tid=' . $tudu->tuduId . '&fid=' . $unId);
                 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_tudu_notify.tpl';
     if (!file_exists($tpl) || !is_readable($tpl)) {
         $this->getLogger()->warn("Tpl file:\"mail_tudu_notify.tpl\" is not exists");
         return;
     }
     // 公用信息
     $common = array('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]);
     $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 Tudu id:{$tuduId} done");
 }
Example #2
0
 /**
  * 更新用户
  */
 public function update(array $params)
 {
     // 组织ID必须有
     if (empty($params['orgid'])) {
         require_once 'Model/User/Exception.php';
         throw new Model_User_Exception('Missing or invalid value of parameter "orgid"', self::CODE_INVALID_ORGID);
     }
     $orgId = $params['orgid'];
     $edit = array('truename' => true, 'password' => true, 'dept' => true, 'status' => true, 'role' => true, 'group' => true, 'cast' => true, 'netdisk' => true, 'email' => true);
     if (!empty($params['edit'])) {
         $edit = $params['edit'];
     }
     /* @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/User/Exception.php';
         throw new Model_User_Exception('Missing the value of parameter "userid"', self::CODE_MISSING_UID);
     }
     $userId = $params['userid'];
     $user = $daoUser->getUser(array('orgid' => $orgId, 'userid' => $userId));
     $userIf = $daoUser->getUserInfo(array('orgid' => $orgId, 'userid' => $userId));
     // 用户不存在
     if (null === $user) {
         require_once 'Model/User/Exception.php';
         throw new Model_User_Exception('Missing the value of parameter "userid"', self::CODE_USER_NOTEXISTS);
     }
     // 用户真实姓名
     if ($edit['truename'] && empty($params['truename'])) {
         require_once 'Model/User/Exception.php';
         throw new Model_User_Exception('Missing or invalid value of parameter "truename"', self::CODE_INVALID_USERNAME);
     }
     // 邮箱格式有误
     if ($edit['email'] && !empty($params['email']) && !Oray_Function::isEmail($params['email'])) {
         require_once 'Model/User/Exception.php';
         throw new Model_User_Exception('Invalid value of parameter "email"', self::CODE_INVALID_EMAIL);
     }
     $userParam = array();
     $userInfo = array();
     if ($edit['status']) {
         $userParam['status'] = isset($params['status']) ? (int) $params['status'] : 1;
     }
     if ($edit['dept']) {
         $userParam['deptid'] = isset($params['deptid']) ? $params['deptid'] : null;
     }
     if (isset($params['ordernum'])) {
         $userParam['ordernum'] = (int) $params['ordernum'];
     }
     $userParam['lastupdatetime'] = time();
     if (isset($params['isshow'])) {
         $userParam['isshow'] = $params['isshow'];
     }
     if (isset($params['truename'])) {
         $userInfo['truename'] = $params['truename'];
     }
     if (isset($params['position'])) {
         $userInfo['position'] = $params['position'];
     }
     if (isset($params['gender'])) {
         $userInfo['gender'] = (int) $params['gender'];
     }
     if (isset($params['tel'])) {
         $userInfo['tel'] = $params['tel'];
     }
     if (isset($params['mobile'])) {
         $userInfo['mobile'] = $params['mobile'];
     }
     if (isset($params['email'])) {
         $userInfo['email'] = $params['email'];
     }
     /* @var $daoOrg Dao_Md_Org_Org */
     $daoOrg = Tudu_Dao_Manager::getDao('Dao_Md_Org_Org', Tudu_Dao_Manager::DB_MD);
     // 读取组织信息
     $org = $daoOrg->getOrg(array('orgid' => $orgId));
     // 网盘空间
     if ($edit['netdisk'] && !empty($params['maxndquota'])) {
         $ndQuota = (double) $params['maxndquota'] * 1000000;
         if ($ndQuota != $user->maxNdQuota) {
             if ($params['maxndquota'] > 1000) {
                 require_once 'Model/User/Exception.php';
                 throw new Model_User_Exception('You can not set exceed 1000MB netdisk space', self::CODE_EXCEED_MAX_NDSPACE);
             }
             /* @var $daoFolder Dao_Td_Netdisk_Folder */
             $daoFolder = Tudu_Dao_Manager::getDao('Dao_Td_Netdisk_Folder', Tudu_Dao_Manager::DB_TS);
             $folderRoot = $daoFolder->getFolder(array('uniqueid' => $user->uniqueId, 'folderid' => '^root'));
             if (null !== $folderRoot && $ndQuota < $folderRoot->folderSize) {
                 require_once 'Model/User/Exception.php';
                 throw new Model_User_Exception('This netdisk space can not less than the used netdisk space', self::CODE_LESS_NDSPACE);
             }
             // 更新用户网盘跟文件夹空间
             if (null !== $folderRoot) {
                 $daoFolder->updateFolder($user->uniqueId, '^root', array('maxquota' => $ndQuota));
             }
             $userParam['maxndquota'] = $ndQuota;
         }
     }
     // 无效的出生日期
     if (!empty($params['birthday'])) {
         if (false === $params['birthday']) {
             require_once 'Model/User/Exception.php';
             throw new Model_User_Exception('Missing or invalid value of parameter "birthday"', self::CODE_INVALID_BIRTHDAY);
         }
         $userInfo['birthday'] = $params['birthday'];
     }
     if ($edit['truename'] && !Oray_Function::isByte($params['truename'])) {
         require_once 'Tudu/Pinyin.php';
         $userInfo['pinyin'] = Tudu_Pinyin::parse($params['truename'], true);
     }
     if (!empty($params['nick'])) {
         $userInfo['nick'] = $params['nick'];
     }
     if (!empty($params['idnumber'])) {
         $userInfo['idnumber'] = $params['idnumber'];
     }
     if ($edit['password'] && !empty($params['password'])) {
         if ($daoUser->isAdmin($orgId, $userId)) {
             require_once 'Model/User/Exception.php';
             throw new Model_User_Exception('Can not modify the administrator password', self::CODE_NOT_MODIFY_PWD);
         }
         $userParam['initpassword'] = 1;
         $userInfo['password'] = $params['password'];
     }
     // 用户头像
     if (!empty($params['avatars'])) {
         $userInfo['avatartype'] = $params['avatartype'];
         $userInfo['avatars'] = $params['avatars'];
         /* @var $daoImContact Dao_Im_Contact_Contact */
         //$daoImContact = Tudu_Dao_Manager::getDao('Dao_Im_Contact_Contact', Tudu_Dao_Manager::DB_IM);
         // 需要更新im自定义联系人表的updatetime
         // im通过更新时间判断是否需要获取用户头像
         //$daoImContact->updateUser($userId . '@' . $orgId, array('updatetime' => time()));
     }
     // 更新用户数据
     if (!empty($userParam)) {
         if (!$daoUser->updateUser($orgId, $user->userId, $userParam)) {
             require_once 'Model/User/Exception.php';
             throw new Model_User_Exception('Update user failed', self::CODE_SAVE_FAILED);
         }
     }
     if (!empty($userInfo)) {
         if (!$daoUser->updateUserInfo($orgId, $user->userId, $userInfo)) {
             require_once 'Model/User/Exception.php';
             throw new Model_User_Exception('Update user info failed', self::CODE_SAVE_FAILED);
         }
     }
     // 群组
     /* @var $daoGroup Dao_Md_User_Group */
     $daoGroup = Tudu_Dao_Manager::getDao('Dao_Md_User_Group', Tudu_Dao_Manager::DB_MD);
     if ($edit['group']) {
         $groups = !empty($params['groupid']) ? $params['groupid'] : array();
         $daoUser->removeGroups($user->orgId, $user->userId);
         foreach ($groups as $groupId) {
             $daoGroup->addUser($orgId, $groupId, $userId);
         }
     }
     // 权限组
     /* @var $daoRole Dao_Md_User_Role */
     $daoRole = Tudu_Dao_Manager::getDao('Dao_Md_User_Role', Tudu_Dao_Manager::DB_MD);
     if ($edit['role']) {
         $roles = !empty($params['roleid']) ? $params['roleid'] : array();
         $daoUser->removeRoles($user->orgId, $user->userId);
         foreach ($roles as $roleId) {
             $daoRole->addUsers($orgId, $roleId, $userId);
         }
     }
     // 组织架构
     /* @var $daoCast Dao_Md_User_Cast */
     $daoCast = Tudu_Dao_Manager::getDao('Dao_Md_User_Cast', Tudu_Dao_Manager::DB_MD);
     if ($edit['cast']) {
         $castDepts = !empty($params['castdept']) ? $params['castdept'] : array();
         $castUsers = !empty($params['castuser']) ? $params['castuser'] : array();
         // 清除组织架构
         $daoCast->clear($orgId, $userId);
         // 隐藏部门
         foreach ($castDepts as $dept) {
             if (!trim($dept) || $dept == '^root' || $dept == $userParam['deptid']) {
                 continue;
             }
             $daoCast->hideDepartment($orgId, $userId, $dept);
         }
         // 隐藏用户
         foreach ($castUsers as $uId) {
             if (!$uId || $uId == $userId) {
                 continue;
             }
             $daoCast->hideUser($orgId, $userId, $uId);
         }
         // 更换部门
         if ($user->deptId != $userParam['deptid']) {
             $daoCast->updateDepartment($orgId, $userId, $userParam['deptid']);
         }
     }
     // 修改企业默认密码
     if ($edit['password'] && !empty($params['password']) && $org->defaultPassword != $params['password']) {
         $daoOrg->updateOrg($orgId, array('defaultpassword' => $params['password']));
     }
     // 发送通知,插入消息队列
     if (Tudu_Model::hasResource(Tudu_Model::RESOURCE_CONFIG)) {
         $config = Tudu_Model::getResource(Tudu_Model::RESOURCE_CONFIG);
         if ($config['httpsqs']) {
             $options = $config['httpsqs'];
             $httpsqs = new Oray_Httpsqs($options['host'], $options['port'], $options['charset'], $options['name']);
             $data = implode(' ', array(Dao_Md_Log_Oplog::MODULE_DEPT, Dao_Md_Log_Oplog::OPERATION_UPDATE, null, implode(':', array($orgId, $user->userName, $user->uniqueId, ''))));
             $httpsqs->put($data);
         }
     }
     // 添加后台操作日志
     if (!empty($params['operator']) && !empty($params['clientip'])) {
         $params['local'] = empty($params['local']) ? null : $params['local'];
         $trueName = $edit['truename'] ? $params['truename'] : $userIf->trueName;
         $this->_createLog(Dao_Md_Log_Oplog::MODULE_USER, Dao_Md_Log_Oplog::OPERATION_UPDATE, null, array('orgid' => $orgId, 'operator' => $params['operator'], 'clientip' => $params['clientip'], 'local' => $params['local']), implode(':', array($orgId, $user->userName, $user->uniqueId)), array('truename' => $trueName, 'account' => $user->userName));
     }
 }
Example #3
0
 /**
  * 联系人 - 从公共通讯录复制过去个人通讯录和添加到组的操作
  *
  * @param $email
  * @param $groupId
  */
 private function _addSystemMember($email, $groupId)
 {
     $daoContact = $this->getDao('Dao_Td_Contact_Contact');
     $daoGroup = $this->getDao('Dao_Td_Contact_Group');
     $daoCast = $this->getMdDao('Dao_Md_User_Cast');
     $daoUser = $this->getMdDao('Dao_Md_User_User');
     $userId = array_shift(explode('@', $email));
     $domain = array_pop(explode('@', $email));
     if (!$daoCast->existsUser($this->_user->orgId, $this->_user->userId, $userId)) {
         return;
     }
     $profile = $daoUser->getUser(array('domainname' => $domain, 'userid' => $userId));
     $userinfo = $daoUser->getUserInfo(array('orgid' => $this->_user->orgId, 'userid' => $userId));
     $ctid = Dao_Td_Contact_Contact::getContactId();
     $params = array('contactid' => $ctid, 'uniqueid' => $this->_user->uniqueId, 'truename' => $userinfo->trueName, 'pinyin' => Tudu_Pinyin::parse($userinfo->trueName, true), 'email' => $email, 'mobile' => $userinfo->mobile, 'fromuser' => 1);
     $daoContact->createContact($params);
     $daoGroup->addMember($groupId, $this->_user->uniqueId, $ctid);
 }
Example #4
0
 /**
  * 设置字符集合
  * 
  * @param string $charset
  */
 public static function setCharset($charset)
 {
     self::$_charset = $charset;
 }