Changeset 141

Show
Ignore:
Timestamp:
06/27/08 09:07:29 (2 months ago)
Author:
felix
Message:

service commit, alignment from production; checkbox-group with serialization and many to many rel support

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/rapyd/components/component.php

    r117 r141  
    163163      foreach ($matches as $field) 
    164164      { 
    165         if (isset($values[$field])
     165        if (isset($values[$field]) or is_null($values[$field])
    166166        $output = str_replace('{'.$field.'}', $values[$field], $output); 
    167167      } 
  • trunk/rapyd/components/fields/dataform_field.php

    r129 r141  
    1212  public $extra_output = ""; 
    1313 
     14  public $serialization_sep = '|'; 
     15 
    1416  //atributes 
    1517  public $maxlength; 
     
    3638 
    3739  public $value = null; 
     40  public $values = array(); 
    3841  public $new_value; 
    3942 
    4043  public $request_refill = true; 
    4144  public $is_refill  = false; 
     45   
     46  public $options_table = '';  
    4247 
    4348  // layout 
     
    123128    if (($this->request_refill == true) && isset($_POST[$this->name])) 
    124129    { 
    125       $request_value = self::xssfilter($_POST[$this->name]); 
    126  
    127       if (get_magic_quotes_gpc()) $request_value = stripslashes($request_value); 
    128       $this->value = $request_value; 
     130 
     131      if (is_array($_POST[$this->name])) 
     132      { 
     133        $values = array(); 
     134        foreach ($_POST[$this->name] as $value) 
     135        { 
     136          $request_value = self::xssfilter($_POST[$this->name]); 
     137          if (get_magic_quotes_gpc()) $request_value = stripslashes($request_value); 
     138          $values[] = $request_value; 
     139        } 
     140        $this->value = implode($this->serialization_sep,$values); 
     141      } 
     142      else 
     143      { 
     144        $request_value = self::xssfilter($_POST[$this->name]); 
     145        if (get_magic_quotes_gpc()) $request_value = stripslashes($request_value); 
     146        $this->value = $request_value; 
     147      } 
    129148      $this->is_refill = true; 
    130149    } elseif (($this->status == "create") && ($this->insert_value != null)) 
     
    138157    { 
    139158      $name = $this->db_name; 
    140       $this->value = $this->model->get($name); 
     159 
     160      if ($this->options_table!="") 
     161      { 
     162        //da ottimizzare, (options_array dovrebbe accettare anche uncampo solo) 
     163        $this->db->query('SET @rownum:=-1;'); 
     164        $this->db->select('@rownum:=@rownum+1 rownum,'.$this->name); 
     165        $this->db->from($this->options_table); 
     166        $this->db->where($this->model->pk); 
     167        $this->db->get(); 
     168        $values = $this->db->options_array(); 
     169        $this->value = implode($this->serialization_sep,$values); 
     170      } 
     171      else 
     172      { 
     173        $this->value = $this->model->get($name); 
     174      } 
     175 
    141176    } 
    142177    $this->get_mode(); 
     
    156191        $this->action = "update"; 
    157192      } 
    158       $request_value = self::xssfilter($_POST[$this->name]); 
    159       if (get_magic_quotes_gpc()) $request_value = stripslashes($request_value); 
    160       $this->new_value = $request_value; 
     193       
     194      //serializzazione o gestione della relazione 1-n o n-m 
     195      if (is_array($_POST[$this->name])) 
     196      { 
     197        $values = array(); 
     198        foreach ($_POST[$this->name] as $value) 
     199        { 
     200          $values[] = (get_magic_quotes_gpc()) ? stripslashes(self::xssfilter($value)) : self::xssfilter($value); 
     201        } 
     202        $this->new_value = implode($this->serialization_sep,$values); 
     203      } 
     204      else 
     205      { 
     206        $request_value = self::xssfilter($_POST[$this->name]); 
     207        if (get_magic_quotes_gpc()) $request_value = stripslashes($request_value); 
     208        $this->new_value = $request_value; 
     209      } 
     210 
    161211    } elseif( ($this->action == "insert") && ($this->insert_value != null)) { 
    162212      $this->new_value = $this->insert_value; 
     
    167217    } 
    168218  } 
     219 
    169220 
    170221  // -------------------------------------------------------------------- 
     
    256307    $this->get_new_value(); 
    257308 
    258     if (is_object($this->model)&& isset($this->db_name)
     309    if (is_object($this->model)&& isset($this->db_name) && $this->options_table==""
    259310    { 
    260311      if (!in_array($this->db_name, $this->model->field_names)) 
     
    273324      } 
    274325    } 
     326     
     327    if ($this->options_table!="") 
     328    { 
     329      //bisogna farla diventare "post_process" e creare una procedure per eliminare i figli in cancellazione,  
     330      $this->db->delete($this->options_table, $this->model->pk); 
     331       
     332      $values = explode('|',$this->new_value); 
     333      foreach ($values as $value) 
     334      { 
     335        $set = $this->model->pk; 
     336        $set[$this->name] = $value; 
     337        $this->db->insert($this->options_table, $set); 
     338        unset($set); 
     339      } 
     340    } 
    275341    return true; 
    276342  }