Skip to content

Instantly share code, notes, and snippets.

@benedmunds
Created May 22, 2012 13:45
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benedmunds/657de89b26decda2b2fa to your computer and use it in GitHub Desktop.
Save benedmunds/657de89b26decda2b2fa to your computer and use it in GitHub Desktop.
CodeIgniter Ion Auth - set_hooks example
//this would probably be in a library or model
class activity
{
function add($type)
{
$this->db->insert('activity', array(
'type' => $type,
'datetime' => 'now()',
));
}
}
//set the hook
$this->ion_auth->set_hook('post_register', 'add_meta', 'activity', 'add', array('user_added'));
//other stuff...
//after this is called the hook will be executed automatically
$this->ion_auth->register(...
@withremote
Copy link

I keep getting the " Using $this when not in object context" error when trying to call the set_hook from my controller.
say i have something like this:

In Controller

$id = 1;
$update = array('email'=>'someone@nowhere.com','api_key'=>'1234test');
// set hook for update meta data
$this->ion_auth->set_hook('post_update_user', 'update_user_meta', 'users_model', 'update_meta', array($id,$update));                    
$this->ion_auth->update($id,$update);

Model

class Users_model extends CI_Model {

protected $meta_cols = array();
protected $tables = array();

function __construct() {
    parent::__construct();
    $this->meta_cols = $this->db->list_fields('meta');
    $this->tables = $this->db->list_tables();
    }

      function update_meta($user_id, array $data)
      {
          $update = array();
          if(is_array($data))
          {
             foreach($this->meta_cols as $cols)
             {
                 if(array_key_exists($cols, $data))
                 {
                     $update[$cols] = $data[$cols];
                 }
             }
          }

          return count($update) > 0 ? $this->db->where($this->tables['meta'].'.user_id',$user_id)->update($this->tables['meta'],$update) : FALSE;

      }

}

The script chokes on the "foreach($this->meta_cols as $cols)" line when called with the set_hook function.

@benedmunds
Copy link
Author

Change your controller to something like this, note the way the class is passed:

$id = 1;
$update = array('email'=>'someone@nowhere.com','api_key'=>'1234test');
// set hook for update meta data
$this->ion_auth->set_hook('post_update_user', 'update_user_meta', $this->users_model, 'update_meta', array($id,$update));                    
$this->ion_auth->update($id,$update);

@withremote
Copy link

thanks!

@brandonkboswell
Copy link

Is there a way to pass data into the event? I'm trying to create a hook for "post_account_creation_successful" for updating a MailChimp Mailing List, but I'm not sure how to obtain the user information from the event to pipe that to the MailChimp API.

@rafidcse
Copy link

thanks

@wrabit
Copy link

wrabit commented Nov 11, 2014

Can I have the hooked method in one controller and set_hook() run from another controller?

@babyfaceEasy
Copy link

Is there a way for me to pass data in the present ion-auth function into my own function? i want to hash both the activation code and the id found in the link sent to user's email addresses, in order to activate their account. Then inside the activate (inside ion-auth-model) i want to 'un-hash' it so that ion-auth flow can continue as normal..

@datamweb
Copy link

Hello,@benedmunds
I can run your example. The data in the table is entered correctly.by:
$this->ion_auth->set_hook('post_register', 'add_meta', 'activity', 'add', array('user_added'));
But why does not the following command answer?
$this->ion_auth->set_hook('post_activate', 'add_meta', 'activity', 'add', array('user_added'));
And i reviewed the following. The correct operation is not done.

$this->ion_auth->set_hook(array('post_activate', 'post_activate_successful'), 'add_meta',  'activity', 'add', array('user_added'));
$this->ion_auth->set_hook('post_activate_successful', 'add_meta',  'activity', 'add', array('user_added'));

please guide me?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment