2012-02-19 4 views
0

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

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

  • Я немного смущен относительно того, как устанавливать свои ошибки, если что-то правильно или неправильно делать с процессом активации. В настоящее время я устанавливаю сообщения с помощью $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 */ 

ответ

0

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

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

См http://codeigniter.com/user_guide/libraries/sessions.html> Флэш данные

+0

спасибо, я, кажется, возникла проблема, что я до сих пор добавляется в базу данных без какого-либо знака электронной почты. Даже если у меня есть функция обратного вызова, установленная для проверки для пользователя, она также добавляет –

+0

. Этого следует ожидать: пользователь добавляется в базу данных при регистрации! Электронное письмо предназначено, чтобы настроить свою учетную запись на АКТИВНО, когда они нажимают на ссылку. Вы не допускаете пользователя на сайт, если их учетная запись не активна. Итак, register -> user в db с account_active = 0; письмо отправлено; click link -> account_active = 1 – stormdrain

+0

Я знаю, но его все еще добавляет, даже если администратор имени пользователя существует, и я не получаю никакого обратного вызова, но я получаю подтверждение, когда форма «требуется», но ничего не прошло. –

Смежные вопросы