Справка и функции контроллера - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть общая функция create, которая отправляет нового пользователя в базу данных - это прекрасно работает.Я застрял в следующем:

  • Я знаю, что мне нужно, чтобы подписавшийся пользователь щелкнул ссылку в письме, прежде чем учетная запись сможет войти в систему. Как мне реализовать это в моем if statement , когда я запускаю функцию создания?

  • Я немного смущен тем, какустановите мои ошибки, если что-то правильно или неправильно связано с процессом активации. Я установил сообщения, используя $this->form_validation->set_message();. Нужно ли использовать set_flashdata () ;?и как будет отражать их в представлении?

Когда я create новый пользователь, у меня поле userActive установлено в 0 по умолчанию, а также по умолчаниюгруппа установлена ​​на users

Контроллер:

   <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Users extends CI_Controller {


    public function index()
    {
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['pageTitle'] = "Create User";
        $this->load->view('frontend/assets/header', $data);
        $this->load->view('frontend/users', $data);
        $this->load->view('frontend/assets/footer');
    }

    public function create(){   

        //If form validation fails load previous page with errors else do the job and insert data into db

        if($this->form_validation->run('createUser') == FALSE)
        {
            $data['success'] = "";
        }else{
            $username = $this->input->post('userName');
            $password = $this->input->post('userPassword');
            $firstname = $this->input->post('userFirstName');
            $lastname = $this->input->post('userLastName');
            $email = $this->input->post('userEmail');

            $passwordHash = $this->encrypt->sha1($password); // Lets encrypt the password why sha1?  MD5 is for tossers

            $activateCode = $this->_activateCode(10);

            // If the data is correct follow through with db insert

            if($this->users_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$activateCode))
            {
                $data['success'] = TRUE;

                redirect('frontend/users/create','refresh');

            }

        }
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['pageTitle'] = "Create User";
        $this->load->view('frontend/assets/header', $data);
        $this->load->view('frontend/user_create', $data);
        $this->load->view('admin/assets/footer');

        echo get_class($this);
        var_dump(method_exists($this, '_activateCode'));
    }

    function _userRegEmail($activateCode,$email,$firstname,$lastname){
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['companyEmail'] = $this->core_model->companyDetails()->coreCompanyEmail;
        $data['companyContact'] = $this->core_model->companyDetails()->coreContactName;
        $data['firstName'] = $firstName;
        $data['lastName'] = $lastname;
        $data['email'] = $email;
        $data['activateCode'] = $activateCode;

        $this->email->from($this->core_model->companyDetails()->coreCompanyEmail, $this->core_model->companyDetails()->coreCompanyName);
        $this->email->to($email);
        $this->email->subject($this->core_model->companyDetails()->coreCompanyName, 'User Registration Confirmation');

        $messageContent= $this->load->view('email_templates/userReg','', TRUE);

        $this->email->message($messageContent);

        //$this->email->send();
    }

    function usersconfirm(){

        $activateCode = $this->uri->segment(3);

        if($activateCode == '')
        {
            $this->form_validation->set_message('userConfirmError', 'Sorry you did not have a correct Activation Code.');
        }
            $userConfirmed = $this->users_model->confirm_user($activateCode);

            if($userConfirmed){
                $this->form_validation->set_message('userConfirmed', 'Thanks your account is now active you may login!');
            }else{
                $this->form_validation->set_message('userRecord', 'I am sorry we do not have any details with that Activation Code');
            }
    }

     function _username_check($username)
    {
        if($this->users_model->username_taken($username))
        {
            $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!');
            return FALSE;
        }else{
            return TRUE;
        }
    }

    function _email_check($email)
    {
        if($this->users_model->email_check($email))
        {
            $this->form_validation->set_message('email_check','Sorry there is already a user with this %s');
            return FALSE;
        }else{
            return TRUE;
        }

    }

   function _activateCode($length)
    {
        return random_string('alnum', $length);
    }

}

/* End of file users.php */
/* Location: ./application/controllers/users.php */

1 Ответ

0 голосов
/ 20 февраля 2012

Вы можете определить, щелкнул ли пользователь по ссылке активации, проверив базу данных на userActive в своем операторе if.

Вы можете использовать данные флэш-памяти, конечно. Вы можете получить данные флэш-памяти с: $this->session->flashdata('item'); для вывода на экран.

См. http://codeigniter.com/user_guide/libraries/sessions.html> данные флэш-памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...