Beispiel #1
0
	/** 
	 * Each row contains a dataobject with any number of attributes
	 * @param $ID int The ID of the record
	 * @param $form Form A Form object containing all of the fields for this item.  The data should be loaded in
	 * @param $fieldTypes array An array of name => fieldtype for use when creating a new field
	 * @param $parent TableListField The parent table for quick reference of names, and id's for storing values.
	 */
	function __construct($item = null, $parent, $form, $fieldTypes, $isAddRow = false) {
		$this->data = $form;
		$this->fieldTypes = $fieldTypes;
		$this->isAddRow = $isAddRow;
		$this->item = $item;

		parent::__construct(($this->item) ? $this->item : new DataObject(), $parent);
		
		$this->fields = $this->createFields();
	}
 function __construct(DataObject $item, ComplexTableField $parent, $start)
 {
     $this->start = $start;
     parent::__construct($item, $parent);
 }
 function generateExportFileData(&$numColumns, &$numRows)
 {
     $separator = $this->csvSeparator;
     $csvColumns = $this->fieldListCsv ? $this->fieldListCsv : $this->fieldList;
     $fileData = '';
     $columnData = array();
     $fieldItems = new DataObjectSet();
     if ($this->csvHasHeader) {
         $fileData .= "\"" . implode("\"{$separator}\"", array_values($csvColumns)) . "\"";
         $fileData .= "\n";
     }
     if (isset($this->customSourceItems)) {
         $items = $this->customSourceItems;
     } else {
         $dataQuery = $this->getCsvQuery();
         $items = $dataQuery->execute();
     }
     // temporary override to adjust TableListField_Item behaviour
     $this->setFieldFormatting(array());
     $this->fieldList = $csvColumns;
     if ($items) {
         foreach ($items as $item) {
             if (is_array($item)) {
                 $className = isset($item['RecordClassName']) ? $item['RecordClassName'] : $item['ClassName'];
                 $item = new $className($item);
             }
             $fieldItem = new TableListField_Item($item, $this);
             $fields = $fieldItem->Fields();
             $columnData = array();
             if ($fields) {
                 foreach ($fields as $field) {
                     $value = $field->Value;
                     // TODO This should be replaced with casting
                     if (array_key_exists($field->Name, $this->csvFieldFormatting)) {
                         $format = str_replace('$value', "__VAL__", $this->csvFieldFormatting[$field->Name]);
                         $format = preg_replace('/\\$([A-Za-z0-9-_]+)/', '$item->$1', $format);
                         $format = str_replace('__VAL__', '$value', $format);
                         eval('$value = "' . $format . '";');
                     }
                     $value = str_replace(array("\r", "\n"), "\n", $value);
                     $tmpColumnData = "\"" . str_replace("\"", "\"\"", $value) . "\"";
                     $columnData[] = $tmpColumnData;
                 }
             }
             $fileData .= implode($separator, $columnData);
             $fileData .= "\n";
             $item->destroy();
             unset($item);
             unset($fieldItem);
         }
         $numColumns = count($columnData);
         $numRows = $fieldItems->count();
         return $fileData;
     } else {
         return null;
     }
 }