/** * 外发图度任务 * * @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"); }
/** * 更新用户 */ 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)); } }
/** * 联系人 - 从公共通讯录复制过去个人通讯录和添加到组的操作 * * @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); }
/** * 设置字符集合 * * @param string $charset */ public static function setCharset($charset) { self::$_charset = $charset; }