a4bcBarcodes = new Barcodes(); } /** * Template method for generating resulting array and send. */ public function make() { ValidatorPostData::validate($this->validationRules, true); $this->getItems(); $this->generateBarcodes(); return $this->getResult(); } /** * Array of items for which maker should generate barcodes. * * @return array */ abstract protected function getItems(); abstract protected function getFileOptions($itemData, $algorithm, $showCode); /** * Generate barcodes and form result. */ protected function generateBarcodes() { $algorithm = isset(PostData::$postData['format']) ? PostData::$postData['format'] : null; $showCode = empty(PostData::$postData['hideCode']); // For each item generate barcode image foreach ($this->items as $itemData) { $fileOptions = $this->getFileOptions($itemData, $algorithm, $showCode); $validationResult = $this->a4bcBarcodes->validateBarcode($fileOptions['field_code'], $fileOptions['algorithm']); // if the barcode is correct if ($validationResult['is_valid']) { // create barcode image by settings $fileImage = $this->a4bcBarcodes->generateFile($fileOptions); // Prepare barcode data $barcodeData = array( 'image' => $fileImage, 'field_code' => $fileOptions['showCode'] ? $fileOptions['field_code'] : false, 'field_name' => $fileOptions['field_name'], 'field_text' => $fileOptions['field_text'], 'field_text_2' => $fileOptions['field_text_2'], 'format' => $fileOptions['algorithm'], ); // Add to results. Take into account quantity parameter. for ($i = $fileOptions['quantity']; $i > 0; --$i) { $this->barcodes[] = $barcodeData; } } else { // if the barcode is not correct $this->errors[] = array( 'id' => $itemData->ID, 'name' => $fileOptions['field_name'], 'code' => $validationResult['message'] ? $validationResult['message'] : $fileOptions['field_code'], 'text' => $fileOptions['field_text'], 'text2' => $fileOptions['field_text_2'], 'format' => $fileOptions['algorithm'], ); } } } /** * Send result. */ protected function getResult() { $result = array( 'listItems' => $this->barcodes, 'success' => $this->success, 'error' => $this->errors, ); return $result; } }