09.25 php
alkemann
Note
Merge behavior start
  1. <?php
  2. /*
  3. * @author Alexander Morland (alexander#maritimecolours.no)
  4. * @co-author Eskil Mjelva Saatvedt
  5. * @co-author Ronny Vindenes
  6. * @co-author Carl Erik Fyllingen
  7. * @developedby Maritime Colours
  8. * @category Behavior
  9. * @version 0.1
  10. * @modified 25. sept. 2008 by alexander morland
  11. */
  12.  
  13. class MergeableBehavior extends ModelBehavior
  14. {
  15.    
  16.     /**
  17.      * Cake called intializer
  18.      * Config options are list of field names and instructions on how to merge:
  19.      * @options : 'use_target', 'use_source', 'use_target_source', 'use_source_target' or false to skip
  20.      *
  21.      * @param Object $Model
  22.      * @param array $config
  23.      */
  24.     function setup(&$Model, $config = null) {
  25.         $this->settings = array(
  26.             $Model->primaryKey => FALSE,
  27.             'created' => FALSE,
  28.             'modified' => FALSE
  29.         );
  30.         if ($config) {
  31.             $this->settings = array_merge($this->settings, $config);
  32.         }
  33.  
  34.        
  35.     }
  36.    
  37.     function settings(&$Model) {
  38.         return $this->settings;
  39.     }
  40.  
  41.     function merge(&$Model, $target_id, $source_id, $data = array(), $field_options = array()) {
  42.         $fields = am($this->settings, $field_options);
  43.        
  44.         $target = $Model->find('first', array('conditions'=>array($Model->primaryKey => $target_id),'recursive' => -1));
  45.         $source = $Model->find('first', array('conditions'=>array($Model->primaryKey => $source_id),'recursive' => -1));
  46.        
  47.         $new_values = array();
  48.         foreach ($fields as $key => $value) {
  49.             switch ($value) {
  50.                 case 'use_target':
  51.                     $new_values[$key] = $target[$Model->alias][$key];
  52.                 break
  53.                 case 'use_source':
  54.                     $new_values[$key] = $source[$Model->alias][$key];
  55.                 break
  56.                 case 'use_target_source':
  57.                     $new_values[$key] = $target[$Model->alias][$key]."\n ".$source[$Model->alias][$key];
  58.                 break
  59.                 case 'use_source_target':
  60.                     $new_values[$key] = $source[$Model->alias][$key]."\n ".$target[$Model->alias][$key];
  61.                 break;       
  62.                 case 'use_input': default:
  63.                     $new_values[$key] = $data[$Model->alias][$key];
  64.                 break;
  65.                 case FALSE: break;
  66.             }
  67.         }
  68.         $data = array($Model->alias => $new_values);
  69.         if ($Model->save($data,false)) {
  70.             $Model->delete($target_id);
  71.             $Model->delete($source_id);   
  72.         }
  73.         return true;
  74.     }
  75. }
  76. ?>
Parsed in 0.098 seconds, using GeSHi 1.0.7.14

Modify this Paste