/** * 加入域 * * @param int $uid * @param \MongoId $domainId * @return bool * @throws InvalidArgumentException * @throws UserException */ public function joinDomainById($uid, \MongoId $domainId) { if (!Validator::int()->validate($uid)) { throw new InvalidArgumentException('uid', 'type_invalid'); } $uid = (int) $uid; if (!DomainUtil::isGlobalDomainId($domainId)) { // 检查域是否存在 $d = Application::coll('Domain')->findOne(['_id' => $domainId]); if (!DomainUtil::isDomainObjectValid($d)) { throw new UserException('DomainManager.joinDomain.invalid_domain'); } } // 检查用户是否存在 $user = UserUtil::getUserObjectByUid($uid); if (!UserUtil::isUserObjectValid($user)) { throw new UserException('DomainManager.joinDomain.invalid_user'); } // 添加 MEMBER 角色 Application::coll('UserRole')->update(['uid' => $uid], ['$addToSet' => ['d.' . (string) $domainId => 'DOMAIN_MEMBER']], ['upsert' => true]); // 创建空资料 $document = ['pref' => new \stdClass(), 'rp' => 0.0, 'rp_s' => 0.0, 'rank' => -1, 'level' => 0]; if (DomainUtil::isGlobalDomainId($domainId)) { $document += ['sig' => '', 'sigraw' => '', 'contacts' => []]; } Application::coll('UserInfo')->update(['uid' => $uid, 'domain' => new \MongoId(VJ::DOMAIN_GLOBAL)], ['$setOnInsert' => $document], ['upsert' => true]); // 操作非全局域则插入操作记录 if (!DomainUtil::isGlobalDomainId($domainId)) { $doc = ['uid' => $this->session->getCurrentToken(), 'at' => new \MongoDate(), 'type' => 'join', 'ua' => $this->request->getUserAgent(), 'ip' => $this->request->getClientIp(), 'target_uid' => $uid, 'target_domain' => $domainId]; Application::coll('DomainLog')->insert($doc); } return true; }
public function onEvent(GenericEvent $event, $eventName, $uid) { switch ($eventName) { case 'user.created': $this->domain_manager->joinDomainById($uid, DomainUtil::getGlobalDomainId()); break; } }
protected function execute(InputInterface $input, OutputInterface $output) { // 导入题目模板 $output->writeln('Importing problem template...'); $template = file_get_contents(__DIR__ . '/data/problem-template.md'); Application::coll('System')->update(['_id' => 'ProblemTemplate'], ['$set' => ['markdown' => $template]], ['upsert' => true]); // 创建全局域 $output->writeln('Creating global domain...'); try { $doc = ['_id' => DomainUtil::getGlobalDomainId(), 'name' => 'OpenVJ', 'owner' => VJ::USER_ID_SYSTEM, 'at' => new \MongoDate()]; Application::coll('Domain')->insert($doc); } catch (\Exception $e) { } // 导入关键字 $this->importKeyword($output, 'keywords-general-base64.txt', 'general'); $this->importKeyword($output, 'keywords-name-base64.txt', 'name'); }