prefixPath = $config['folderBarcode']; $uploadDirData = wp_upload_dir(); $dt = new \DateTime(); $subfolder = $dt->format('d'); $this->uploadPath = $uploadDirData['basedir'].'/'.$this->prefixPath.$uploadDirData['subdir'].'/'.$subfolder; wp_mkdir_p($this->uploadPath); // create a folder for generated barcodes $this->imageUrl = $uploadDirData['baseurl'].'/'.$this->prefixPath.$uploadDirData['subdir'].'/'.$subfolder; } /** * Create barcode file by parameters. * * @param $data * * @return string * * @throws \Com\Tecnick\Barcode\Exception * @throws \Com\Tecnick\Color\Exception */ public function generateFile($data) { // If it is 2d code, set equal width and height if ('QRCODE' === $data['algorithm'] || 'DATAMATRIX' === $data['algorithm']) { $w = 12; $h = 12; } else { // Width and height for 1d code $w = -8; $h = 480; } // Generate code and save to file. $barcodeGenerator = new Generator(); $barcodeGenerator->setStorPath($this->uploadPath.'/'); $fileName = $barcodeGenerator->getGeneratedBarcodeSVGFileName($data['field_code'], $data['algorithm'], $w, $h, 'black'); return $this->imageUrl.'/'.$fileName; } /** * Validation of the barcode. * * @param string $code * @param string $algorithm * * @return array */ public function validateBarcode($code, $algorithm) { $validData = array( 'message' => '', 'is_valid' => true, ); // if the barcode creation field is empty - output an error // separate validation of the field by which the barcode is created if (0 == mb_strlen($code)) { $validData['is_valid'] = false; $validData['message'] = __('The "Code" field has an empty value.', 'wpbcu-barcode-generator'); return $validData; } // barcode validation by algorithm switch ($algorithm) { case 'EAN8': // EAN 8 $validData['is_valid'] = CodeValidator::IsValidEAN8($code); // Put error if code not valid if (!$validData['is_valid']) { $validData['message'] = __('"Code" field contains incorrect data. It must contain 8 digits. 7 digits and 8th is a checksum digit calculated by formula. Check more on Wiki.', 'wpbcu-barcode-generator'); } break; case 'EAN13': // EAN 13 $validData['is_valid'] = CodeValidator::IsValidEAN13($code); // Put error if code not valid if (!$validData['is_valid']) { $validData['message'] = __('"Code" field contains incorrect data. It must contain 13 digits. 12 digits and 13th is a checksum digit calculated by formula. Check more on Wiki.', 'wpbcu-barcode-generator'); } break; case 'UPCA': // UPC-A $validData['is_valid'] = CodeValidator::IsValidUPCA($code); // Put error if code not valid if (!$validData['is_valid']) { $validData['message'] = __('"Code" field contains incorrect data. It must contain 12 digits. 11 digits and 12th is a checksum digit calculated by formula. Check more on Wiki.', 'wpbcu-barcode-generator'); } break; case 'UPCE': // UPC-E $validData['is_valid'] = CodeValidator::IsValidUPCE($code); // Put error if code not valid if (!$validData['is_valid']) { $validData['message'] = __('"Code" field contains incorrect data. It must contain 6 digits. UPC-E is a variation of UPC-A which allows for a more compact barcode by eliminating "extra" zeros. Check more on Wiki.', 'wpbcu-barcode-generator'); } break; case 'C128': // CODE-128 // разрешено много символов и какой-то валидации конкретной не нашел $patern = '/^[ -~]+$/'; $validData['is_valid'] = preg_match($patern, $code); // Put error if code not valid if (!$validData['is_valid']) { $validData['message'] = __('"Code" field contains incorrect data. Code 128 supports alphanumeric or numeric-only barcodes. It can encode all 128 characters of ASCII encoding.', 'wpbcu-barcode-generator'); } break; case 'C39': // CODE-39 $patern = "#^[0-9a-zA-Z\-\.\ \$\/\+\%]+$#ui"; // if the line of code does not match the pattern of the barcode algorithm if (false == preg_match($patern, $code)) { $validData['is_valid'] = false; $validData['message'] = __('"Code" field contains incorrect data. Code 39 supports 43 characters, consisting of letters (A-Z), numeric digits (0 through 9) and a number of special characters (-, ., $, /, +, %, and space).', 'wpbcu-barcode-generator'); } break; case 'QRCODE': // QRCODE $validData['is_valid'] = true; $validData['message'] = ''; break; case 'DATAMATRIX': // DataMatrix $validData['is_valid'] = true; $validData['message'] = ''; break; } return $validData; } }