04.01 php saved
dardosordi
Tags add more
fixed polymorphic be  
Note
fixed AD7Six polymorphic behavior
  1.  
  2. <?php
  3. /* SVN FILE: $Id: polymorphic.php 18 2008-03-07 12:56:09Z andy $ */
  4. /**
  5. * Polymorphic Behavior.
  6. *
  7. * Allow the model to be associated with any other model object
  8. *
  9. * Copyright (c), Andy Dawson
  10. *
  11. * Licensed under The MIT License
  12. * Redistributions of files must retain the above copyright notice.
  13. *
  14. * @filesource
  15. * @author   Andy Dawson (AD7six)
  16. * @version  $Revision: 18 $
  17. * @modifiedby    $LastChangedBy: andy $
  18. * @lastmodified    $Date: 2008-03-07 13:56:09 +0100 (Fri, 07 Mar 2008) $
  19. * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
  20. */
  21. class PolymorphicBehavior extends ModelBehavior {
  22.    
  23.     function setup(&$model, $config = array()) {
  24.         $this->settings[$model->name] = am (array('classField' => 'class', 'foreignKey' => 'foreign_id'),$config);
  25.     }
  26.  
  27.     function afterFind (&$model, $results, $primary = false) {
  28.         extract($this->settings[$model->name]);
  29.         if ($primary && isset($results[0][$model->alias][$classField]) && $model->recursive > 0) {
  30.             foreach ($results as $key => $result) {
  31.                 $associated = array();
  32.                 $class = $result[$model->alias][$classField];
  33.                 $foreignId = $result[$model->alias][$foreignKey];
  34.                 if ($class && $foreignId) {
  35.                     $result = $result[$model->alias];
  36.                     if (!isset($model->$class)) {
  37.                         $model->bindModel(array('belongsTo' => array(
  38.                             $class => array(
  39.                                 'conditions' => array($model->alias . '.' . $classField => $class),
  40.                                 'foreignKey' => $foreignKey
  41.                             )
  42.                         )));
  43.                     }
  44.                     $associated = $model->$class->find(array($class . '.id' => $foreignId),
  45.                         null, null, -1);
  46.                     $associated[$class]['display_field'] = $associated[$class][$model->$class->displayField];
  47.                     $results[$key][$class] = $associated[$class];
  48.                 }
  49.             }
  50.         } elseif(isset($results[$model->alias][$classField])) {
  51.             $associated = array();
  52.             $class = $results[$model->alias][$classField];
  53.             $foreignId = $results[$model->alias][$foreignKey];
  54.             if ($class && $foreignId) {
  55.                 $result = $results[$model->alias];
  56.                 if (!isset($model->$class)) {
  57.                     $model->bindModel(array('belongsTo' => array(
  58.                         $class => array(
  59.                             'conditions' => array($model->alias . '.' . $classField => $class),
  60.                             'foreignKey' => $foreignKey
  61.                         )
  62.                     )));
  63.                 }
  64.                 $associated = $model->$class->find(array($class.'.id' => $foreignId), array('id', $model->$class->displayField), null, -1);
  65.                 $associated[$class]['display_field'] = $associated[$class][$model->$class->displayField];
  66.                 $results[$class] = $associated[$class];
  67.             }
  68.         }
  69.         return $results;
  70.     }
  71. }
  72. ?>
  73.  
Parsed in 0.128 seconds, using GeSHi 1.0.7.14

Modify this Paste