diff --git a/Dockerfile b/Dockerfile
index 5668259..7e801d9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,82 +1,15 @@
-FROM php:8.3
+FROM php:latest
-RUN if [ "$(grep '^VERSION_ID=' /etc/os-release | cut -d '=' -f 2 | tr -d '"')" -eq "9" ]; then \
- sed -i -e 's/deb.debian.org/archive.debian.org/g' \
- -e 's/security.debian.org/archive.debian.org/g' \
- -e '/stretch-updates/d' /etc/apt/sources.list; \
- fi
+RUN apt-get update && \
+ apt-get install -y --no-install-recommends less nano tini curl bash tar git zip unzip && \
+ #echo "**** # To install networking tools for testing purpose ****" && \
+ apt-get install -y --no-install-recommends iputils-ping dnsutils net-tools procps && \
+ #echo "**** cleanup ****" && \
+ apt-get autoremove -y && \
+ apt-get clean -y
-# Download script to install PHP extensions and dependencies
-ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
-
-RUN chmod +x /usr/local/bin/install-php-extensions
-
-RUN DEBIAN_FRONTEND=noninteractive apt-get update -q \
- && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y \
- curl \
- dnsutils \
- git \
- iputils-ping \
- less \
- libzip-dev \
- libjpeg62-turbo-dev \
- libpng-dev \
- libfreetype6-dev \
- nano \
- net-tools \
- procps \
- tar \
- tini \
- zip unzip \
-# iconv, mbstring and pdo_sqlite are omitted as they are already installed
- && PHP_EXTENSIONS=" \
- amqp \
- bcmath \
- bz2 \
- calendar \
- event \
- exif \
- gd \
- gettext \
- intl \
- ldap \
- memcached \
- mysqli \
- opcache \
- pdo_mysql \
- pdo_pgsql \
- pgsql \
- redis \
- soap \
- sockets \
- xsl \
- zip \
- " \
- && case "$PHP_VERSION" in \
- 5.6.*) PHP_EXTENSIONS="$PHP_EXTENSIONS mcrypt mysql";; \
- 7.0.*|7.1.*) PHP_EXTENSIONS="$PHP_EXTENSIONS mcrypt";; \
- esac \
- # Install Imagick from master on PHP >= 8.3, because imagick 3.7.0 broke on latest PHP releases and Imagick maintainers don't care to tag a newer release
- && if [ $(php -r 'echo PHP_VERSION_ID;') -lt 80300 ]; then \
- PHP_EXTENSIONS="$PHP_EXTENSIONS imagick"; \
- else PHP_EXTENSIONS="$PHP_EXTENSIONS https://api.github.com/repos/Imagick/imagick/tarball/28f27044e435a2b203e32675e942eb8de620ee58"; \
- fi \
- && install-php-extensions $PHP_EXTENSIONS \
- && if command -v a2enmod; then a2enmod rewrite; fi
-
-# Install Composer.
-ENV PATH=$PATH:/root/composer/vendor/bin \
- COMPOSER_ALLOW_SUPERUSER=1 \
- COMPOSER_HOME=/root/composer
-RUN cd /opt \
- # Download installer and check for its integrity.
- && curl -sSL https://getcomposer.org/installer > composer-setup.php \
- && curl -sSL https://composer.github.io/installer.sha384sum > composer-setup.sha384sum \
- && sha384sum --check composer-setup.sha384sum \
- # Install Composer 2.
- && php composer-setup.php --install-dir=/usr/local/bin --filename=composer --2 \
- # Remove installer files.
- && rm /opt/composer-setup.php /opt/composer-setup.sha384sum
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends libzip-dev libjpeg62-turbo-dev libpng-dev libfreetype6-dev
RUN docker-php-source extract
RUN docker-php-ext-install pdo_mysql zip exif pcntl gd
@@ -84,17 +17,7 @@ RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN docker-php-ext-install gettext && docker-php-ext-enable gettext
RUN docker-php-ext-install sockets && docker-php-ext-enable sockets
-RUN mkdir -p /opt && chmod 777 /opt
-WORKDIR /opt
-RUN git clone https://github.com/chillerlan/php-qrcode.git \
- && chmod -R 777 ./php-qrcode
-RUN cp ./php-qrcode/composer.json /var/www/html/composer.json
-RUN mkdir -p /var/www/html/test && chmod 777 /var/www/html/test
-RUN cp ./php-qrcode/examples/image.php /var/www/html/test/image.php
-RUN cp -R ./php-qrcode/src /var/www/html/
-
WORKDIR /var/www/html
-RUN composer update
COPY ./src ./
RUN chmod 755 *;
EXPOSE 80
diff --git a/src/forms/qrcode_options.php b/src/forms/qrcode_options.php
index b7f3b34..d918862 100644
--- a/src/forms/qrcode_options.php
+++ b/src/forms/qrcode_options.php
@@ -45,7 +45,6 @@
-
@@ -76,7 +75,6 @@
-
@@ -109,4 +107,4 @@
"/>
-
+
\ No newline at end of file
diff --git a/src/forms/table_static.php b/src/forms/table_static.php
index 23a72ad..4fa8e18 100644
--- a/src/forms/table_static.php
+++ b/src/forms/table_static.php
@@ -58,7 +58,7 @@
|
|
- |
+ |
'; ?>
|
diff --git a/src/lib/Qrcode/Qrcode.php b/src/lib/Qrcode/Qrcode.php
index 0043258..8686d09 100644
--- a/src/lib/Qrcode/Qrcode.php
+++ b/src/lib/Qrcode/Qrcode.php
@@ -1,19 +1,5 @@
setOptions($input_data);
- $outputInterface = QRGdImagePNG::class;
- $imageFormat = strtolower($data_to_db['format']);
- $fileExt = $imageFormat;
- $forceBlackWhite = false;
+ if(!file_exists(SAVED_QRCODE_DIRECTORY.$data_to_db['filename'].'.'.$data_to_db['format'])){
+ $url =
+ 'https://api.qrserver.com/v1/create-qr-code/?data='.
+ $data_to_qrcode.
+ '&&size='.$options['size'].'x'.$options['size'].
+ '&ecc='.$options['errorCorrectionLevel'].
+ '&margin=0&color='.$options['foreground'].
+ '&bgcolor='.$options['background'].
+ '&qzone=2'.
+ '&format='.$data_to_db['format'];
-
- switch ($imageFormat)
- {
- case 'png':
- $outputInterface = QRGdImagePNG::class;
- $imageFormat = 'png';
- break;
- case 'gif':
- $outputInterface = QRImagick::class;
- $imageFormat = 'gif';
- break;
- case 'jpg':
- $outputInterface = QRImagick::class;
- $imageFormat = 'jpg';
- break;
- case 'jpeg':
- $outputInterface = QRImagick::class;
- $imageFormat = 'jpeg';
- break;
- case 'svg':
- # $outputInterface = QRImagick::class;
- $outputInterface = QRMarkupSVG::class;
- $imageFormat = 'svg';
- break;
- case 'svgbw':
- $outputInterface = QRMarkupSVG::class;
- $imageFormat = 'svg';
- $fileExt = 'svg';
- $forceBlackWhite = true;
- $data_to_db['format'] = $fileExt;
- $data_to_db['qrcode'] = str_replace('.svgbw', '.svg', $data_to_db['qrcode']);
- break;
- case 'eps':
- $outputInterface = QREps::class;
- $imageFormat = 'eps';
- break;
- }
-
-
- if(!file_exists(SAVED_QRCODE_DIRECTORY.$data_to_db['filename'].'.' . $fileExt)){
- $eccLevel = constant(EccLevel::class.'::'.strtoupper($options['errorCorrectionLevel']));
-
- $qroptions = new QROptions;
- $qroptions->outputInterface = $outputInterface;
- $qroptions->outputBase64 = false;
- $qroptions->eccLevel = $eccLevel;
- $qroptions->quietzoneSize = 2;
-
- $moduleValues = [
- // finder
- QRMatrix::M_FINDER_DARK => $options['foreground'],
- QRMatrix::M_FINDER_DOT => $options['foreground'],
- QRMatrix::M_FINDER => $options['background'],
- // alignment
- QRMatrix::M_ALIGNMENT_DARK => $options['foreground'],
- QRMatrix::M_ALIGNMENT => $options['background'],
- // timing
- QRMatrix::M_TIMING_DARK => $options['foreground'],
- QRMatrix::M_TIMING => $options['background'],
- // format
- QRMatrix::M_FORMAT_DARK => $options['foreground'],
- QRMatrix::M_FORMAT => $options['background'],
- // version
- QRMatrix::M_VERSION_DARK => $options['foreground'],
- QRMatrix::M_VERSION => $options['background'],
- // data
- QRMatrix::M_DATA_DARK => $options['foreground'],
- QRMatrix::M_DATA => $options['background'],
- // darkmodule
- QRMatrix::M_DARKMODULE => $options['foreground'],
- // separator
- QRMatrix::M_SEPARATOR => $options['background'],
- // quietzone
- QRMatrix::M_QUIETZONE => $options['background'],
- ];
-
- if(in_array($data_to_db['format'], ['png', 'jpg', 'gif'], true))
- {
- $moduleValues = array_map(function($v)
- {
- if(preg_match('/[a-f\d]{6}/i', $v) === 1)
- {
- return array_map('hexdec', str_split($v, 2));
- }
-
- return null;
- }, $moduleValues);
-
- $qroptions->moduleValues = $moduleValues;
- }
- else
- {
- $moduleValues = array_map(function($v)
- {
- if(preg_match('/[a-f\d]{6}/i', $v) === 1)
- {
- return '#' . $v ;
- }
-
- return null;
- }, $moduleValues);
-
- $qroptions->moduleValues = $moduleValues;
- }
-
- if ($outputInterface === QRMarkupSVG::class)
- {
- $qroptions->version = 7;
- // if set to false, the light modules won't be rendered
- $qroptions->drawLightModules = true;
- $qroptions->svgUseFillAttributes = false;
- // draw the modules as circles isntead of squares
- $qroptions->drawCircularModules = true;
- $qroptions->circleRadius = 0.4;
- // connect paths
- $qroptions->connectPaths = true;
- // keep modules of these types as square
- $qroptions->keepAsSquare = [
- QRMatrix::M_FINDER_DARK,
- QRMatrix::M_FINDER_DOT,
- QRMatrix::M_ALIGNMENT_DARK,
- ];
-
- if($forceBlackWhite)
- {
- $qroptions->drawLightModules = false;
- $qroptions->drawCircularModules = false;
- // https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient
- $qroptions->svgDefs = '
-
-
-
-
- ';
- }
- else
- {
- // https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient
- $qroptions->svgDefs = '
-
-
-
-
-
-
-
-
- ';
- }
- }
- else
- {
- $qroptions->version = -1;
- $qroptions->scale = 20;
- $qroptions->quality = 83;
- }
-
- if ($outputInterface === QRImagick::class)
- {
- $qroptions->imagickFormat = $imageFormat;
- $qroptions->returnResource = true;
- $imagick = (new QRCodeEx($qroptions))->render(urldecode($data_to_qrcode));
- $imagick->scaleImage($options['size'], $options['size'], true);
- $content = $imagick->getImageBlob();
- $imagick->destroy();
- }
- else
- {
- $content = (new QRCodeEx($qroptions))->render(urldecode($data_to_qrcode));
- }
-
- $filename = SAVED_QRCODE_DIRECTORY.$data_to_db['filename'].'.' . $fileExt;
-
- try
- {
+ $content = file_get_contents($url);
+
+ $filename = SAVED_QRCODE_DIRECTORY.$data_to_db['filename'].'.'.$data_to_db['format'];
+
+ try{
file_put_contents($filename, $content);
- if ($outputInterface !== QRImagick::class &&
- $outputInterface !== QRMarkupSVG::class)
- {
- $imagick = new \Imagick(realpath($filename));
- $imagick->resizeImage($options['size'], $options['size'], imagick::FILTER_LANCZOS, 1, false);
- $imagick->writeImage($filename);
- $imagick->destroy();
- }
}
- catch(Exception $e)
- {
+ catch(Exception $e){
$this->failure($e->getMessage());
}
-
+
// If you want you can customiaddLogo($data_to_db['qrcode'], $options['optionlogo']);