/** * Automatic called before smarty display is called * @param $core Core * @param $smarty \Smarty * @return void */ public function preRender($core, $smarty) { $smarty->assign('disable', $core->getUserManager()->getCurrentInternalAccount() !== null); if ($core->getUserManager()->getCurrentInternalAccount() === null) { if (isset($_POST['action']) && $_POST['action'] == 'system-migrate-account') { if (!empty($_POST['visible_name'])) { if (strlen($_POST['visible_name']) < 8 || strlen($_POST['visible_name']) > 16) { $core->addError('system.errors.length', array('min' => 8, 'max' => 16, 'field' => $core->getTranslator()->translate('system.register.field.visible_name'))); } else { $em = $core->getInternalDatabase()->getEntityManager(); // Check if name is in use $tmp = $em->getRepository('\\Quantum\\DBO\\InternalAccount')->findOneBy(array('displayName' => $_POST['visible_name'])); if ($tmp == null) { // Create internal data $internalAccount = new InternalAccount(); $internalAccount->setAccountId($core->getUserManager()->getCurrentAccount()->getId()); $internalAccount->setDisplayName($_POST['visible_name']); $em->persist($internalAccount); $em->flush(); $core->getUserManager()->loadInternalAccount(); $this->redirectTo('Home'); } else { $core->addError('system.register.display_name_check'); } } } else { $core->addError('system.register.missing.visible_name'); } } } }
/** * Load the internal account */ public function loadInternalAccount() { $emI = $this->core->getInternalDatabase()->getEntityManager(); $this->currentInternalAccount = $emI->getRepository('\\Quantum\\DBO\\InternalAccount')->findOneBy(array('accountId' => $this->currentAccount->getId())); if ($this->currentInternalAccount == null) { return; } // Load groups $userGroups = $emI->getRepository('\\Quantum\\DBO\\UserGroup')->findBy(array('userId' => $this->currentInternalAccount->getId())); /** @var $userGroup UserGroup */ foreach ($userGroups as $userGroup) { $this->groups[] = $emI->find('\\Quantum\\DBO\\Group', $userGroup->getGroupId()); } // Load privileges /** @var $group Group */ foreach ($this->groups as $group) { $groupPrivileges = $emI->getRepository('\\Quantum\\DBO\\GroupPrivilege')->findBy(array('groupId' => $group->getId())); /** @var $groupPrivilege GroupPrivilege */ foreach ($groupPrivileges as $groupPrivilege) { /** @var $privilege Privilege */ $privilege = $emI->find('\\Quantum\\DBO\\Privilege', $groupPrivilege->getId()); $this->stringPrivileges[] = $privilege->getTechnicalName(); $this->privileges[] = $privilege; } } }
/** * Automatic called before smarty display is called * @param $core Core * @param $smarty \Smarty * @return void */ public function preRender($core, $smarty) { if (isset($_POST['action']) && $_POST['action'] == 'system-register') { // Check required fields $requiredFields = array('acc_name', 'visible_name', 'password', 'check_password', 'mailaddress', 'check_mailaddress', "deletecode"); $success = true; foreach ($requiredFields as $field) { if (empty($_POST[$field])) { $core->addError('system.register.missing.' . $field); $success = false; } } if ($success) { // Validate Captcha if ($core->validateCaptcha()) { // Validate lengths $requiredLengths = array('acc_name' => array(8, 16), 'visible_name' => array(8, 16), 'password' => array(8, 16), 'mailaddress' => array(5, 50), 'deletecode' => array(7, 7)); $success = true; foreach ($requiredLengths as $field => $lengths) { $min = $lengths[0]; $max = $lengths[1]; if (strlen($_POST[$field]) < $min || strlen($_POST[$field]) > $max) { $translatedField = $core->getTranslator()->translate('system.register.field.' . $field); $core->addError('system.errors.length', array('min' => $min, 'max' => $max, 'field' => $translatedField)); $success = false; } } if ($success) { // Validate check password field if ($_POST['password'] == $_POST['check_password']) { // Validate check email field if ($_POST['mailaddress'] == $_POST['check_mailaddress']) { $em = $core->getServerDatabase('account')->getEntityManager(); // Check if id already in use $tmp = $em->getRepository('Quantum\\DBO\\Account')->findOneBy(array('login' => $_POST['acc_name'])); if ($tmp == null) { // Check if display name is already in use $emI = $core->getInternalDatabase()->getEntityManager(); $tmp = $emI->getRepository('Quantum\\DBO\\InternalAccount')->findOneBy(array('displayName' => $_POST['visible_name'])); if ($tmp == null) { // Everything is fine, create account $account = new Account(); // todo implement hook for salt or something else $account->setLogin($_POST['acc_name']); $account->setPassword($core->createHash($_POST['password'], $account)); $account->setEmail($_POST['mailaddress']); $account->setSocialId($_POST['deletecode']); // todo check if it is really social id $account->setCreateTime(new \DateTime()); $account->setStatus('OK'); // todo implement account validation (e.g email) $em->persist($account); $em->flush(); // Create internal details $internalAccount = new InternalAccount(); $internalAccount->setAccountId($account->getId()); $internalAccount->setDisplayName($_POST['visible_name']); $emI->persist($internalAccount); $emI->flush(); $smarty->assign('register_success', true); } else { $core->addError('system.register.display_name_check'); } } else { $core->addError('system.register.login_check'); } } else { $core->addError('system.register.mail_check'); } } else { $core->addError('system.register.password_check'); } } } else { $core->addError('system.errors.captcha'); } } } }