/[drupal]/contributions/modules/pbs/pbs.fieldapi.inc
ViewVC logotype

Diff of /contributions/modules/pbs/pbs.fieldapi.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.9, Wed Apr 22 03:23:44 2009 UTC revision 1.10, Mon Jun 1 00:12:32 2009 UTC
# Line 63  function pbs_bundle_schema($bundle) { Line 63  function pbs_bundle_schema($bundle) {
63    $instances = field_info_instances($bundle);    $instances = field_info_instances($bundle);
64    foreach ($instances as $instance) {    foreach ($instances as $instance) {
65      $field = field_info_field($instance['field_name']);      $field = field_info_field($instance['field_name']);
66      $columns = (array) module_invoke($field['module'], 'field_columns', $field);      $schema = (array) module_invoke($field['module'], 'field_schema', $field);
67      if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {      if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {
68        for ($i = 0; $i < $field['cardinality']; ++$i) {        for ($i = 0; $i < $field['cardinality']; ++$i) {
69          foreach ($columns as $name => $spec) {          foreach ($schema['columns'] as $name => $spec) {
70            $column_name = $field['field_name'] .'_'. $name .'_'. $i;            $column_name = $field['field_name'] .'_'. $name .'_'. $i;
71            $current['fields'][$column_name] = $spec;            $current['fields'][$column_name] = $spec;
72          }          }
# Line 118  function pbs_precompute_bundle_map() { Line 118  function pbs_precompute_bundle_map() {
118      foreach ($instances as $instance) {      foreach ($instances as $instance) {
119        $field = field_info_field($instance['field_name']);        $field = field_info_field($instance['field_name']);
120        if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {        if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {
121          $columns = (array) module_invoke($field['module'], 'field_columns', $field);          $schema = (array) module_invoke($field['module'], 'field_schema', $field);
122          for ($delta = 0; $delta < $field['cardinality']; ++$delta) {          for ($delta = 0; $delta < $field['cardinality']; ++$delta) {
123            foreach ($columns as $name => $spec) {            foreach ($schema['columns'] as $name => $spec) {
124              $column_name = _field_sql_storage_columnname($field['field_name'], $name) .'_'. $delta;              $column_name = _field_sql_storage_columnname($field['field_name'], $name) .'_'. $delta;
125              $map[$bundle][$column_name] = array($field['field_name'], $name, $delta);              $map[$bundle][$column_name] = array($field['field_name'], $name, $delta);
126            }            }
# Line 149  function pbs_synchronize_bundle($bundle) Line 149  function pbs_synchronize_bundle($bundle)
149    $instances = field_info_instances($bundle);    $instances = field_info_instances($bundle);
150    foreach ($instances as $instance) {    foreach ($instances as $instance) {
151      $field = field_info_field($instance['field_name']);      $field = field_info_field($instance['field_name']);
152      $field_table = _field_sql_storage_tablename($field['field_name']);      $field_table = _field_sql_storage_tablename($field);
153      if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {      if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {
154        $query = db_select($field_table, 't', array('fetch' => PDO::FETCH_ASSOC))->fields('t');        $query = db_select($field_table, 't', array('fetch' => PDO::FETCH_ASSOC))->fields('t');
155        $results = $query->condition('bundle', $bundle)->execute();        $results = $query->condition('bundle', $bundle)->execute();
# Line 186  function pbs_synchronize_bundle($bundle) Line 186  function pbs_synchronize_bundle($bundle)
186   *   FIELD_LOAD_CURRENT to load the most recent revision for all   *   FIELD_LOAD_CURRENT to load the most recent revision for all
187   *   fields, or FIELD_LOAD_REVISION to load the version indicated by   *   fields, or FIELD_LOAD_REVISION to load the version indicated by
188   *   each object.   *   each object.
  * @param $additions  
  *   An array of field data for the objects being loaded, keyed by  
  *   entity id, field name, and item delta number.  
189   * @param &$skip_fields   * @param &$skip_fields
190   *   An array of whose keys are field names we should skip because   *   An array of whose keys are field names we should skip because
191   *   their data has already been loaded by another module.   *   their data has already been loaded by another module.
# Line 196  function pbs_synchronize_bundle($bundle) Line 193  function pbs_synchronize_bundle($bundle)
193   *   Loaded field values are added to $additions and loaded field   *   Loaded field values are added to $additions and loaded field
194   *   names are set set as keys in $skip_fields.   *   names are set set as keys in $skip_fields.
195   */   */
196  function pbs_field_attach_pre_load($obj_type, $objects, $age, &$additions, &$skip_fields) {  function pbs_field_attach_pre_load($obj_type, $objects, $age, &$skip_fields) {
197    $etid = _field_sql_storage_etid($obj_type);    $etid = _field_sql_storage_etid($obj_type);
198    $load_current = $age == FIELD_LOAD_CURRENT;    $load_current = $age == FIELD_LOAD_CURRENT;
199    
# Line 238  function pbs_field_attach_pre_load($obj_ Line 235  function pbs_field_attach_pre_load($obj_
235          list($field_name, $item_name, $delta) = $tuple;          list($field_name, $item_name, $delta) = $tuple;
236          if (!isset($skip_fields[$field_name])) {          if (!isset($skip_fields[$field_name])) {
237            if (!is_null($row->{$column_name})) {            if (!is_null($row->{$column_name})) {
238              $additions[$row->entity_id][$field_name][$delta][$item_name] = $row->{$column_name};              // We must explicitly include $delta in the assignment
239                // below.  Consider a field 'foo' with two columns, e.g. value
240                // and format. Without using $delta, the row containing
241                // foo_value_0 and foo_format_0 would end up stored as
242                // $obj->foo[0]['value'] and $obj->foo[1/*BZZZ!*/]['format'].
243                $objects[$row->entity_id]->{$field_name}[$delta][$item_name] = $row->{$column_name};
244              }
245              else if (!isset($objects[$row->entity_id]->{$field_name})) {
246                $objects[$row->entity_id]->{$field_name} = array();
247            }            }
248            $new_skips[$field_name] = 1;            $new_skips[$field_name] = 1;
249          }          }
250        }        }
251    
252        // If $row->entity_id has no non-NULL values, $additions will        // field_attach_load() is specified to return data items indexed
253        // have entry for it.        // from delta 0, regardless of how they were provided on save.
254        if (isset($additions[$row->entity_id])) {        // TODO: Wouldn't it be more efficient to do this on save
255          foreach ($additions[$row->entity_id] as $field_name => &$items) {        // instead of load?
256            $items = array_merge($items);        foreach ($bundle_fields[$bundle] as $column_name => $tuple) {
257            list($field_name, $item_name, $delta) = $tuple;
258            if (!isset($skip_fields[$field_name])) {
259              $objects[$row->entity_id]->{$field_name} = array_merge($objects[$row->entity_id]->{$field_name});
260          }          }
261        }        }
262      }      }
# Line 367  function pbs_field_create_instance($inst Line 375  function pbs_field_create_instance($inst
375    if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {    if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {
376      $bundle_table = pbs_tablename($instance['bundle']);      $bundle_table = pbs_tablename($instance['bundle']);
377      $revision_table = pbs_revision_tablename($instance['bundle']);      $revision_table = pbs_revision_tablename($instance['bundle']);
378      $columns = (array) module_invoke($field['module'], 'field_columns', $field);      $schema = (array) module_invoke($field['module'], 'field_schema', $field);
379      for ($i = 0; $i < $field['cardinality']; ++$i) {      for ($i = 0; $i < $field['cardinality']; ++$i) {
380        foreach ($columns as $name => $spec) {        foreach ($schema['columns'] as $name => $spec) {
381          db_add_field($ret, $bundle_table, $field['field_name'] .'_'. $name .'_'. $i, $spec);          db_add_field($ret, $bundle_table, $field['field_name'] .'_'. $name .'_'. $i, $spec);
382          db_add_field($ret, $revision_table, $field['field_name'] .'_'. $name .'_'. $i, $spec);          db_add_field($ret, $revision_table, $field['field_name'] .'_'. $name .'_'. $i, $spec);
383        }        }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.2