123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- $date_format = 'Y-j-m';
-
- /**
- * Returns an array containing a random data type and the editor
- * associated with that type, used by the generateData function.
- */
- function generateType($index) {
- global $date_format;
- $rand = $index === 0 ? 1 : rand(0, 4);
-
- switch ($rand) {
- case 0:
- return array('data' => 'string', 'editor' => array(
- 'xtype' => 'textfield',
- 'allowBlank' => false
- ));
- case 1:
- return array('data' => 'int', 'editor' => array(
- 'xtype' => 'numberfield',
- 'minValue' => 1,
- 'maxValue' => 200
- ));
- case 2:
- return array('data' => 'date', 'editor' => array(
- 'xtype' => 'datefield',
- 'format' => $date_format
- ));
- case 3:
- return array('data' => 'float', 'editor' => array(
- 'xtype' => 'numberfield',
- 'minValue' => 400,
- 'maxValue' => 800
- ));
- case 4:
- return array('data' => 'bool', 'editor' => array(
- 'xtype' => 'checkbox'
- ));
- }
- }
-
- /**
- * Returns a hard-coded data value matching the type passed in.
- */
- function getDataValue($type) {
- global $date_format;
- switch ($type['data']) {
- case 'string':
- return 'data';
- case 'int':
- return 123;
- case 'date':
- return date($date_format);
- case 'float':
- return 456.78;
- case 'bool':
- return true;
- }
- return $type;
- }
-
- /**
- * Generates all of the test data and field/column definitions that will
- * make up the data and metadata for this request.
- */
- function generateData() {
- global $date_format;
- $row_count = rand(10, 30);
- $col_count = rand(5, 10);
- $types = array();
- $data['data'] = array();
- $fields = array();
- $columns = array();
- $defineFields = true;
-
- for ($i=0; $i<$row_count; $i++) {
-
- for ($j=0; $j<$col_count; $j++) {
- // first pass through columns only, define fields and columns
- if ($defineFields) {
- // generate a random data type for the field/column
- $type = generateType($j);
- array_push($types, $type);
-
- // =====================================================================
- // define the default placeholder field definition. this fields
- // config is supported by the metachange handling in Ext by default
- // to reconfigure the data store's field definitions.
- $field = array(
- 'name' => 'field-'.($j+1),
- 'type' => $type['data']
- );
- // add any type-specific field attributes
- if ($type['data'] === 'date') {
- $field['dateFormat'] = $date_format;
- }
- // add the field to the fields list
- array_push($fields, $field);
-
- // =====================================================================
- // define the default placeholder column definition to match the field.
- // note that this columns block only applies to grids. in the past the
- // fields config was reused both by the store and also by grids, but since
- // it is usually preferable to add column-specific metadata that the store
- // doesn't care about, it's usually better to split the two definitions.
- $col = array(
- 'dataIndex' => 'field-'.($j+1)
- );
- // add in column-specific attributes
- if ($j === 0) {
- // special config for the id column, fixed width and non-editable
- $col['text'] = 'ID';
- $col['width'] = 40;
- }
- else {
- $col['text'] = 'Field '.($j+1).' ('.$type['data'].')';
- $col['editor'] = $type['editor'];
- $col['flex'] = 1;
- }
- // add in type-specific column attributes
- switch ($type['data']) {
- case 'date':
- $col['xtype'] = 'datecolumn';
- $col['format'] = $date_format;
- break;
- case 'float':
- $col['xtype'] = 'numbercolumn';
- $col['format'] = '$0.00';
- break;
- case 'bool':
- //$col['xtype'] = 'checkcolumn';
- break;
- }
- // finally, add the column to the columns list
- array_push($columns, $col);
- }
-
- // every row/col pass, load up some data
- $row['field-'.($j+1)] = $j == 0 ? ($i+1) : getDataValue($types[$j]);
- }
-
- // flip this flag after the first column pass since the fields are defined
- $defineFields = false;
-
- // add the row of generated data to the top-level data object
- // that will be returned in the response
- array_push($data['data'], $row);
- }
-
- // assemble the metadata
- $meta = array();
- $meta['fields'] = $fields;
- $meta['columns'] = $columns;
- $meta['root'] = 'data';
- $meta['idProperty'] = 'field-1';
- $meta['messageProperty'] = 'msg';
-
- // assemble the top-level data object being returned.
- // the data is already in $data['data'] at this point.
- $data['metaData'] = $meta;
- $data['total'] = $row_count;
- $data['msg'] = 'Success!';
-
- return $data;
- }
-
- echo json_encode(generateData());
- ?>
|