targetFragment = $targetFragment; $this->printColumns = $printColumns; } /** * Place the print button in a
tag below the field */ public function getHTMLFragments($gridField) { $button = new GridField_FormAction( $gridField, 'print', _t('TableListField.Print', 'Print'), 'print', null ); $button->setAttribute('data-icon', 'grid_print'); $button->addExtraClass('gridfield-button-print'); //$button->addExtraClass('no-ajax'); return array( $this->targetFragment => '
', ); } /** * print is an action button */ public function getActions($gridField) { return array('print'); } function handleAction(GridField $gridField, $actionName, $arguments, $data) { if($actionName == 'print') { return $this->handlePrint($gridField); } } /** * it is also a URL */ function getURLHandlers($gridField) { return array( 'print' => 'handlePrint', ); } /** * Handle the print, for both the action button and the URL */ public function handlePrint($gridField, $request = null) { set_time_limit(60); Requirements::clear(); Requirements::css(SAPPHIRE_DIR . '/css/GridField_print.css'); if($data = $this->generatePrintData($gridField)){ return $data->renderWith("GridField_print"); } } /** * Export core. */ function generatePrintData($gridField) { $printColumns = ($this->printColumns) ? $this->printColumns : $gridField->getDisplayFields(); if($this->printHasHeader){ $header = new ArrayList(); foreach($printColumns as $field => $label){ $header->push( new ArrayData(array( "CellString" => $label, )) ); } } $items = $gridField->getList(); foreach($gridField->getConfig()->getComponents() as $component){ if($component instanceof GridFieldFilterHeader || $component instanceof GridFieldSortableHeader) { $items = $component->getManipulatedData($gridField, $items); } } $itemRows = new ArrayList(); foreach($items as $item) { $itemRow = new ArrayList(); foreach($printColumns as $field => $label) { $value = $item->relField($field); $itemRow->push( new ArrayData(array( "CellString" => $value, )) ); } $itemRows->push(new ArrayData( array( "ItemRow" => $itemRow ) )); $item->destroy(); } //get title for the print view $form = $gridField->getForm(); $currentController = Controller::curr(); $title = method_exists($currentController, 'Title')?$currentController->Title(): ($currentController->Title?$currentController->Title: ($form?$form->Name():'')); if($fieldTitle = $gridField->Title()) $title .= ($title?' - ':'').$fieldTitle; //$state = $gridField->getState(false)->__toString(); $ret = new ArrayData( array( "Title" => $title, "Header" => $header, "ItemRows" => $itemRows, "Datetime" => SS_Datetime::now(), "Member" => Member::currentUser(), ) ); return $ret; } /** * @return array */ function getPrintColumns() { return $this->printColumns; } /** * @param array */ function setPrintColumns($cols) { $this->printColumns = $cols; return $this; } /** * @return boolean */ function getPrintHasHeader() { return $this->printHasHeader; } /** * @param boolean */ function setPrintHasHeader($bool) { $this->printHasHeader = $bool; return $this; } }