| 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());
 
- ?>
 
 
  |