Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Authsome Plugins for CakePHP

Authsome Plugins for CakePHP

Awesome-sauce CakePHP Pecha Kucha Talk by yours truly

Jose Diaz-Gonzalez

September 03, 2011
Tweet

More Decks by Jose Diaz-Gonzalez

Other Decks in Technology

Transcript

  1. ~WHOAMI • Jose Diaz-Gonzalez • Resident IRC Troll (savant) •

    Rants at http://josediazgonzalez.com • Harasses as @savant • Codes as josegonzalez on github • EMPLOYED at @seatgeek I’m also hot like sriracha sauce ➘ me ➘ not me
  2. AUTHSOME https://github.com/felixge/cakephp-authsome /**  *  Finds  the  current  user  for  the

     dashboard  *  *  @param  string  $state  Either  "before"  or  "after"  *  @param  array  $query  *  @return  mixed  array  of  results  or  false  if  none  found  *  @return  array  */        function  _findUser($state,  $query,  $results  =  array())  {                if  ($state  ==  'before')  {                        $user_id  =  false;                        if  (!empty($query[0]))  {                                $user_id  =  $query[0];                        }  elseif  (!empty($query['id'])){                                $user_id  =  $query['id'];                        }  else  {                                $user_id  =  Authsome::get($this-­‐>primaryKey);                        }                        if  (empty($user_id))  {                                throw  new  OutOfBoundsException(__('Invalid  maintainer',  true));                        }                        $query['contain']  =  false;                        $query['conditions']  =  array("{$this-­‐>alias}.{$this-­‐>primaryKey}"  =>  $user_id);                        $query['limit']  =  1;                        return  $query;                }  elseif  ($state  ==  'after')  {                        if  (empty($results[0]))  {                                throw  new  OutOfBoundsException(__('Invalid  user',  true));                        }                        return  $results[0];                }        }
  3. SEARCH https://github.com/CakeDC/Search <?php class  Article  extends  AppModel  {    

       public  $actsAs  =  array('Search.Searchable');        public  $belongsTo  =  array('User');        public  $hasAndBelongsToMany  =  array('Tag'  =>  array('with'  =>  'Tagged'));        public  $filterArgs  =  array(                array('name'  =>  'title',  'type'  =>  'like'),                array('name'  =>  'status',  'type'  =>  'value'),                array('name'  =>  'blog_id',  'type'  =>  'value'),                array('name'  =>  'search',  'type'  =>  'like',  'field'  =>  'Article.description'),                array('name'  =>  'username',  'type'  =>  'like',  'field'  =>  'User.username'),                array('name'  =>  'tags',  'type'  =>  'subquery',  'method'  =>  'findByTags',  'field'  =>  'Article.id'),                array('name'  =>  'filter',  'type'  =>  'query',  'method'  =>  'orConditions'),        );        public  function  findByTags($data  =  array())  {                $this-­‐>Tagged-­‐>Behaviors-­‐>attach('Containable',  array('autoFields'  =>  false));                $this-­‐>Tagged-­‐>Behaviors-­‐>attach('Search.Searchable');                $query  =  $this-­‐>Tagged-­‐>getQuery('all',  array(                        'conditions'  =>  array('Tag.name'    =>  $data['tags']),                        'fields'  =>  array('foreign_key'),                        'contain'  =>  array('Tag')                ));                return  $query;        }        public  function  orConditions($data  =  array())  {                $filter  =  $data['filter'];                $cond  =  array(                        'OR'  =>  array(                                $this-­‐>alias  .  '.title  LIKE'  =>  '%'  .  $filter  .  '%',                                $this-­‐>alias  .  '.body  LIKE'  =>  '%'  .  $filter  .  '%',                        ));                return  $cond;        } }