#! /usr/bin/env php */ class knConsoleBatchDialog extends ezcConsoleQuestionDialog { /** * Show the dialog. * Display the dialog and retreive the desired answer from the user. * * @return void */ public function display() { $this->output->outputText( $this->options->text . ( $this->options->showResults === true ? " " . $this->options->validator->getResultString() : "" ) . " ", $this->options->format ); // Read data $result = array(); do { $line = ezcConsoleDialogViewer::readLine(); $result[] = $this->options->validator->fixup( $line ); } while ( trim( $line ) ); // Validate all input lines $validResult = array(); foreach ( $result as $value ) { if ( $this->options->validator->validate( $value ) ) { $validResult[] = $value; } } $this->result = $validResult; } } // Main loop // Instatiate general execution dialog $output = new ezcConsoleOutput(); $proceed = ezcConsoleQuestionDialog::YesNoQuestion( $output, 'Do you want to create another chart?', 'n' ); $run = 0; do { // Select chart type $menu = new ezcConsoleMenuDialog( $output ); $menu->options = new ezcConsoleMenuDialogOptions( array( 'text' => 'Please select the chart type you want to create:', 'validator' => new ezcConsoleMenuDialogDefaultValidator( $charts = array( 'ezcGraphPieChart', 'ezcGraphLineChart', 'ezcGraphBarChart', 'ezcGraphRadarChart', ) ), ) ); $selectedChartType = $charts[ezcConsoleDialogViewer::displayDialog( $menu )]; // Select palette $menu = new ezcConsoleMenuDialog( $output ); $menu->options = new ezcConsoleMenuDialogOptions( array( 'text' => 'Please select the palette you want to use for the chart:', 'validator' => new ezcConsoleMenuDialogDefaultValidator( $palettes = array( 'ezcGraphPaletteBlack', 'ezcGraphPaletteEz', 'ezcGraphPaletteEzBlue', 'ezcGraphPaletteEzGreen', 'ezcGraphPaletteEzRed', 'ezcGraphPaletteTango', ) ), ) ); $selectedPalette = $palettes[ezcConsoleDialogViewer::displayDialog( $menu )]; // How many datasets should be used? if ( $selectedChartType === 'ezcGraphPieChart' ) { $selectedDatasetCount = 1; } else { $question = new ezcConsoleQuestionDialog( $output ); $question->options = new ezcConsoleQuestionDialogOptions( array( 'text' => 'How many datasets do you want to create?', 'validator' => new ezcConsoleQuestionDialogTypeValidator( ezcConsoleQuestionDialogTypeValidator::TYPE_INT, 1 ), ) ); $selectedDatasetCount = ezcConsoleDialogViewer::displayDialog( $question ); } // Enter data for data sets for ( $dataset = 0; $dataset < $selectedDatasetCount; ++$dataset ) { $question = new ezcConsoleQuestionDialog( $output ); $question->options = new ezcConsoleQuestionDialogOptions( array( 'text' => 'Enter a name for the dataset:', 'validator' => new ezcConsoleQuestionDialogTypeValidator( ezcConsoleQuestionDialogTypeValidator::TYPE_STRING, 'Dataset ' . ( $dataset + 1) ), ) ); $dataSetName[$dataset] = ezcConsoleDialogViewer::displayDialog( $question ); $question = new knConsoleBatchDialog( $output ); $question->options = new ezcConsoleQuestionDialogOptions( array( 'text' => 'Please enter the data:', 'validator' => new ezcConsoleQuestionDialogTypeValidator( ezcConsoleQuestionDialogTypeValidator::TYPE_FLOAT ), ) ); $data[$dataset] = ezcConsoleDialogViewer::displayDialog( $question ); } // Finally enter a chart title $question = new ezcConsoleQuestionDialog( $output ); $question->options = new ezcConsoleQuestionDialogOptions( array( 'text' => 'Enter a chart title:', 'validator' => new ezcConsoleQuestionDialogTypeValidator( ezcConsoleQuestionDialogTypeValidator::TYPE_STRING, false ), ) ); $selectedTitle = ezcConsoleDialogViewer::displayDialog( $question ); // Finally create chart from input data $chart = new $selectedChartType(); $chart->palette = new $selectedPalette(); if ( $selectedTitle ) { $chart->title = $selectedTitle; } for ( $i = 0; $i < $selectedDatasetCount; ++$i ) { $chart->data[$dataSetName[$i]] = new ezcGraphArrayDataSet( $data[$i] ); } $chart->render( 400, 200, 'generated_' . (++$run) . '.svg' ); $proceed->reset(); } while ( ezcConsoleDialogViewer::displayDialog( $proceed ) === 'y' ); // We're done