示例#1
0
 /**
  * template_field_group
  * Render a field group.
  *
  * @param array $field The field object.
  *
  * @return string The content from rendering the group.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function template_field_group($field)
 {
     $content = '';
     $cardinality = 1;
     foreach ($field['fields'] as &$column) {
         // Pass through the proper scope and set the field name appropriately
         if (!isset($column['scope']) && $field['scope']) {
             $column['scope'] = $field['scope'];
         }
         $column = self::setup_field($column);
         // Pass through common configuration options
         $column['prefix'] = $field['prefix'];
         $column['relate'] = $field['relate'];
         $column['child_field'] = true;
         $column['child_add_more'] = $field['add_more'] || $field['child_add_more'];
         $column['attributes']['wrapper_class'] = (isset($column['attributes']['wrapper_class']) ? $column['attributes']['wrapper_class'] : null) . ($field['template'] != 'field' ? 'piklist-field-part' : null);
         // Check for template
         if (is_null($column['template'])) {
             if ($column['label_position'] == 'after') {
                 $column['template'] = 'field_label';
             } else {
                 $column['template'] = 'label_field';
             }
         }
         // If there is an error pass it through
         if ($field['errors']) {
             array_push($column['attributes']['class'], 'piklist-error');
         }
         // Set field if needed
         if ($column['type'] == 'html') {
             $column['display'] = true;
             if (!isset($column['field'])) {
                 $column['field'] = piklist::unique_id();
             }
         }
         // Set the object id
         $column['object_id'] = $field['object_id'] ? $field['object_id'] : self::get_field_object_id($column);
         // Handle relate
         $column = piklist_relate::relate_field($column);
         if (!$field['field']) {
             $column['value'] = self::get_field_value($column['scope'], $column, $column['scope'], $column['object_id']);
             $cardinality = !$column['multiple'] && count($column['value']) > $cardinality && (!is_array($field['value']) || is_array($field['value']) && !piklist::is_associative($field['value'])) ? count($column['value']) : $cardinality;
         }
     }
     unset($column);
     if ($field['field']) {
         $cardinality = count($field['value']) > 1 && (!is_array($field['value']) || is_array($field['value']) && !piklist::is_associative($field['value'])) ? count($field['value']) : 1;
     }
     $field_rendering = self::$field_rendering;
     for ($index = 0; $index < $cardinality; $index++) {
         // Setup group details
         $group_id = piklist::unique_id();
         $group_add_more = false;
         foreach ($field['fields'] as $column) {
             // Set index
             $column['index'] = $index;
             // Flag this field as a group field
             $column['group_field'] = true;
             // Add specific group index
             $column['attributes']['data-piklist-field-group'] = $group_id;
             // Update fields on child element if its a group
             if ($column['type'] == 'group') {
                 foreach ($column['fields'] as &$_field) {
                     $_field['attributes']['data-piklist-field-sub-group'] = $group_id;
                 }
             }
             // Check sortable
             if (isset($field['attributes']['data-piklist-field-sortable'])) {
                 $column['attributes']['data-piklist-field-sortable'] = $field['attributes']['data-piklist-field-sortable'];
             }
             // Check add-more
             if ($column['type'] != 'group' && !$group_add_more && isset($field['attributes']['data-piklist-field-addmore'])) {
                 $group_add_more = true;
                 $column['attributes']['data-piklist-field-addmore'] = $field['attributes']['data-piklist-field-addmore'];
                 $column['attributes']['data-piklist-field-addmore-actions'] = $field['attributes']['data-piklist-field-addmore-actions'];
             }
             // Check add-more type
             if (isset($column['add_more']) && $column['add_more'] && isset($field['attributes']['data-piklist-field-addmore'])) {
                 $column['attributes']['data-piklist-field-addmore-single'] = $field['attributes']['data-piklist-field-addmore'];
             }
             // Check conditions
             if (!empty($field['conditions'])) {
                 if (is_array($column['conditions'])) {
                     $column['conditions'] = array_merge($column['conditions'], $field['conditions']);
                     array_push($column['attributes']['class'], 'piklist-field-condition');
                 } else {
                     $column['conditions'] = $field['conditions'];
                 }
             }
             // Setup child field name if necessary
             if ($field['field'] && !stristr($column['field'], ':')) {
                 $column['field'] = $field['field'] . ':' . ($group_add_more ? $index . ':' : null) . $column['field'];
             }
             // Get values
             if (piklist_validate::errors()) {
                 $column['errors'] = piklist_validate::get_errors($column);
                 $column['value'] = piklist_validate::get_request_value($column);
                 // Update cardinality if necessary
                 if (!$field['field']) {
                     $cardinality = !$column['multiple'] && count($column['value']) > $cardinality && (!is_array($field['value']) || is_array($field['value']) && !piklist::is_associative($field['value'])) ? count($column['value']) : $cardinality;
                 }
                 if (is_array($column['value']) && (!$column['multiple'] || $column['multiple'] && !piklist::is_flat($column['value']))) {
                     $column['value'] = $column['value'][$column['index']];
                 }
             } elseif (is_array($field['value'])) {
                 $path = explode(':', str_replace($field['field'] . ':', '', $column['field']));
                 $column['value'] = piklist::array_path_get($field['value'], $path);
             } else {
                 $column['value'] = self::get_field_value($column['scope'], $column, $column['scope'], $column['object_id'], false);
                 if (is_array($column['value']) && (!$column['multiple'] || $column['multiple'] && !piklist::is_flat($column['value']))) {
                     $column['value'] = array_key_exists($column['index'], $column['value']) ? $column['value'][$column['index']] : null;
                 }
             }
             $content .= self::render_field($column, true);
         }
     }
     self::$field_rendering = $field_rendering;
     return $content;
 }