Exemple #1
0
 /**
  * 加入域
  *
  * @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;
 }
Exemple #2
0
 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');
 }