Changeset 26348


Ignore:
Timestamp:
06/13/10 02:17:22 (7 years ago)
Author:
rambo
Message:

deviced a system to sort and group fields more sensibly in merged schemas

Location:
branches/ragnaroek/midcom/net.hurttakallio.library
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/ragnaroek/midcom/net.hurttakallio.library/config/schemadb_items_default.inc

    r26343 r26348  
    88        'name' => 'base',
    99    ),
     10    'customdata'  => array
     11    (
     12        /**
     13         * This is much nicer way to get the fields into preferred order and fieldgroups than trying reorganize
     14         * them across the inheritance chain.
     15         */
     16        'field_groupings' => array
     17        (
     18            array
     19            (
     20                'group_title' => 'basic information',
     21                'group_class' => null,
     22                'group_fields' => array
     23                (
     24                    'barcode',
     25                    'isbn',
     26                    'title',
     27                    'author',
     28                    'media',
     29                    'location',
     30                ),
     31            ),
     32            array
     33            (
     34                'group_title' => 'status information',
     35                'group_class' => null,
     36                'group_fields' => array
     37                (
     38                    'status',
     39                    'extendedstatus',
     40                ),
     41            ),
     42            array
     43            (
     44                'group_title' => 'more information',
     45                'group_class' => null,
     46                'group_fields' => array
     47                (
     48                    'published',
     49                    'image',
     50                    'description',
     51                    'asin',
     52                ),
     53            ),
     54        ),
     55    ),
    1056    'fields'      => array
    1157    (
     
    4591        'path' => 'file:/net/hurttakallio/library/config/schemadb_items_base.inc',
    4692        'name' => 'base',
     93    ),
     94    'customdata'  => array
     95    (
     96        /**
     97         * This is much nicer way to get the fields into preferred order and fieldgroups than trying reorganize
     98         * them across the inheritance chain.
     99         */
     100        'field_groupings' => array
     101        (
     102            array
     103            (
     104                'group_title' => 'basic information',
     105                'group_class' => null,
     106                'group_fields' => array
     107                (
     108                    'barcode',
     109                    'title',
     110                    'media',
     111                    'location',
     112                ),
     113            ),
     114            array
     115            (
     116                'group_title' => 'artists information',
     117                'group_class' => null,
     118                'group_fields' => array
     119                (
     120                    'artist',
     121                    'group',
     122                ),
     123            ),
     124            array
     125            (
     126                'group_title' => 'status information',
     127                'group_class' => null,
     128                'group_fields' => array
     129                (
     130                    'status',
     131                    'extendedstatus',
     132                ),
     133            ),
     134            array
     135            (
     136                'group_title' => 'more information',
     137                'group_class' => null,
     138                'group_fields' => array
     139                (
     140                    'published',
     141                    'image',
     142                    'description',
     143                    'asin',
     144                    'cddb',
     145                ),
     146            ),
     147        ),
    47148    ),
    48149    'fields'      => array
     
    88189        'name' => 'base',
    89190    ),
     191    'customdata'  => array
     192    (
     193        /**
     194         * This is much nicer way to get the fields into preferred order and fieldgroups than trying reorganize
     195         * them across the inheritance chain.
     196         */
     197        'field_groupings' => array
     198        (
     199            array
     200            (
     201                'group_title' => 'basic information',
     202                'group_class' => null,
     203                'group_fields' => array
     204                (
     205                    'barcode',
     206                    'isbn',
     207                    'title',
     208                    'director',
     209                    'media',
     210                    'location',
     211                ),
     212            ),
     213            array
     214            (
     215                'group_title' => 'status information',
     216                'group_class' => null,
     217                'group_fields' => array
     218                (
     219                    'status',
     220                    'extendedstatus',
     221                ),
     222            ),
     223            array
     224            (
     225                'group_title' => 'more information',
     226                'group_class' => null,
     227                'group_fields' => array
     228                (
     229                    'published',
     230                    'image',
     231                    'description',
     232                    'asin',
     233                    'imdb',
     234                ),
     235            ),
     236        ),
     237    ),
    90238    'fields'      => array
    91239    (
  • branches/ragnaroek/midcom/net.hurttakallio.library/utilities.php

    r26345 r26348  
    8585    }
    8686
     87    /**
     88     * Used to detect "raw mode" used with chooser in the CRUD handlers
     89     *
     90     * Will set everything up correctly, first parameter is reference to the calling handler, others are standard handler parameters.
     91     */
    8792    static function raw_mode_checks(&$handler_instance, $handler_id, $args, &$data)
    8893    {
     
    9196            $_MIDCOM->skip_page_style = true;
    9297        }
     98    }
     99
     100    /**
     101     * Handle the customdata -> field_groupings array for all schemas in given schemadb
     102     *
     103     * @param array $schemadb reference to the parsed schemadb
     104     */
     105    static function mangle_schemadb_customdata_field_groupings(&$schemadb, &$l10n)
     106    {
     107        foreach(array_keys($schemadb) as $schema_name)
     108        {
     109            net_hurttakallio_library_utilities::mangle_schema_customdata_field_groupings($schemadb[$schema_name], &$l10n);
     110        }
     111    }
     112
     113    /**
     114     * Handle the customdata -> field_groupings array for all schemas in given schema instance
     115     *
     116     * @param array $schemadb reference to midcom_helper_datamanager2_schema instance
     117     */
     118    static function mangle_schema_customdata_field_groupings(&$schema, &$l10n)
     119    {
     120        if (   !isset($schema->customdata)
     121            || !is_array($schema->customdata)
     122            || !isset($schema->customdata['field_groupings'])
     123            || !is_array($schema->customdata['field_groupings']))
     124        {
     125            // Group info not defined
     126            return false;
     127        }
     128        $groups_info =& $schema->customdata['field_groupings'];
     129
     130        // Make a special group for those that were not listed elsewhere
     131        $ungrouped = array
     132        (
     133            'group_title' => 'ungrouped fields',
     134            'group_class' => 'ungrouped error',
     135            'group_fields' => array
     136            (
     137            ),
     138        );
     139
     140        // Track the fields we have seen
     141        $seen_fields = array();
     142        // Quick way to copy the array (COW would really ruin our day)
     143        $original_order = array_merge($schema->field_order);
     144        // Clear the order, we will add stuff there as we go
     145        $schema->field_order = array();
     146
     147        // Start juggling
     148        foreach (array_keys($groups_info) as $group_info_key)
     149        {
     150            net_hurttakallio_library_utilities::_mangle_schema_customdata_field_groupings_group($schema, $seen_fields, $groups_info[$group_info_key], $l10n);
     151        }
     152        unset($group_info_key);
     153       
     154        foreach ($original_order as $field_name)
     155        {
     156            if (!in_array($field_name, $seen_fields))
     157            {
     158                $ungrouped['group_fields'][] = $field_name;
     159            }
     160        }
     161        unset($field_name, $original_order);
     162        net_hurttakallio_library_utilities::_mangle_schema_customdata_field_groupings_group($schema, $seen_fields, $ungrouped, $l10n);
     163        return true;
     164    }
     165
     166    static function _mangle_schema_customdata_field_groupings_group(&$schema, &$seen_fields, &$group_info, &$l10n)
     167    {
     168        // Make sure the declared fields are present in the schema
     169        foreach($group_info['group_fields'] as $k => $name)
     170        {
     171            if (!isset($schema->fields[$name]))
     172            {
     173                debug_push_class(__CLASS__, __FUNCTION__);
     174                debug_add("Removing field '{$name}' from group since it's not defined in the schema proper", MIDCOM_LOG_WARN);
     175                debug_pop();
     176                unset($group_info['group_fields'][$k]);
     177            }
     178        }
     179        unset($k, $name);
     180
     181        // No fields left, stop early
     182        if (empty($group_info['group_fields']))
     183        {
     184            return;
     185        }
     186
     187        // This reorderes numeric keys to be continuous.
     188        $group_info['group_fields'] = array_merge($group_info['group_fields']);
     189
     190        // Mangle first field to start a fieldgroup
     191        //echo "DEBUG: choosing field '{$group_info['group_fields'][0]}' as first field in group<br>\n";
     192        $first_field =& $schema->fields[$group_info['group_fields'][0]];
     193        $first_field['start_fieldgroup'] = array
     194        (
     195            'title' => $l10n->get($group_info['group_title']),
     196        );
     197        if (isset($group_info['group_class']))
     198        {
     199            $first_field['start_fieldgroup']['css_group'] = $group_info['group_class'];
     200        }
     201        // Mangle last field to end said fieldgroup
     202        //echo "DEBUG: choosing field '{$group_info['group_fields'][count($group_info['group_fields'])-1]}' as last field in group<br>\n";
     203        $last_field =& $schema->fields[$group_info['group_fields'][count($group_info['group_fields'])-1]];
     204        $last_field['end_fieldgroup'] = 1;
     205        unset($first_field, $last_field);
     206
     207        // Add the fields to the field_order array
     208        foreach($group_info['group_fields'] as $k => $name)
     209        {
     210            $seen_fields[] = $name;
     211            $schema->field_order[] = $name;
     212        }
     213        unset($k, $name);
    93214    }
    94215}
  • branches/ragnaroek/midcom/net.hurttakallio.library/viewer.php

    r26345 r26348  
    236236    {
    237237        $this->_request_data['schemadb_items'] = midcom_helper_datamanager2_schema::load_database($this->_config->get('schemadb_items'));
     238        net_hurttakallio_library_utilities::mangle_schemadb_customdata_field_groupings($this->_request_data['schemadb_items'], $this->_l10n);
    238239        $this->_request_data['schemadb_entities'] = midcom_helper_datamanager2_schema::load_database($this->_config->get('schemadb_entities'));
    239240
     
    243244    }
    244245
     246
    245247}
    246248
Note: See TracChangeset for help on using the changeset viewer.