diff --git a/backend/modules/card/controllers/UserCardController.php b/backend/modules/card/controllers/UserCardController.php index 4524d46..06d78e2 100755 --- a/backend/modules/card/controllers/UserCardController.php +++ b/backend/modules/card/controllers/UserCardController.php @@ -2,24 +2,20 @@ namespace backend\modules\card\controllers; -use common\classes\Debug; -use common\models\AchievementUserCard; -use common\models\AdditionalFields; -use common\models\CardSkill; -use common\Models\ChangeHistory; -use common\models\User; -use common\models\FieldsValue; -use common\models\FieldsValueNew; -use common\models\Status; -use Yii; use backend\modules\card\models\UserCard; use backend\modules\card\models\UserCardSearch; +use common\models\AchievementUserCard; +use common\models\CardSkill; +use common\models\FieldsValueNew; +use common\models\User; +use kartik\mpdf\Pdf; +use PhpOffice\PhpWord\PhpWord; +use Yii; use yii\data\ActiveDataProvider; -use yii\db\Expression; use yii\filters\AccessControl; +use yii\filters\VerbFilter; use yii\web\Controller; use yii\web\NotFoundHttpException; -use yii\filters\VerbFilter; /** * UserCardController implements the CRUD actions for UserCard model. @@ -205,4 +201,56 @@ class UserCardController extends Controller throw new NotFoundHttpException('The requested page does not exist.'); } + + public function actionDownloadResume($id, $pdf = false) + { + $model = $this->findModel($id); + + if ($pdf) { + self::getResumePdf($model); + } + self::getResumeDocx($model); + } + + private function getResumePdf(UserCard $model) + { + $pdf = new Pdf(); // or new Pdf(); + $mpdf = $pdf->api; // fetches mpdf api + $mpdf->SetHeader('Resume ' . $model->fio . '||Generated At: ' . date("d/m/Y")); // call methods or set any properties + $mpdf->SetFooter('{PAGENO}'); + $mpdf->WriteHtml($model->vc_text); // call mpdf write html + echo $mpdf->Output("Resume - {$model->fio}", 'D'); // call the mpdf api output as needed + } + + private function getResumeDocx(UserCard $model) + { + $phpWord = new PhpWord(); + + $sectionStyle = array( + 'orientation' => 'portrait', + 'marginTop' => \PhpOffice\PhpWord\Shared\Converter::pixelToTwip(10), + 'marginLeft' => 600, + 'marginRight' => 600, + 'colsNum' => 1, + 'pageNumberingStart' => 1, + 'borderBottomSize'=>100, + 'borderBottomColor'=>'C0C0C0' + ); + $section = $phpWord->addSection($sectionStyle); + $text = $model->vc_text; + $fontStyle = array('name'=>'Times New Roman', 'size'=>14, 'color'=>'000000', 'bold'=>FALSE, 'italic'=>FALSE); + $parStyle = array('align'=>'both','spaceBefore'=>10); + + $section->addText(htmlspecialchars($text), $fontStyle,$parStyle); + + header("Content-Type: application/msword"); + header("Content-Transfer-Encoding: binary"); + header("Content-Disposition: attachment;filename=Resume - {$model->fio}.docx"); + header('Cache-Control: max-age=0'); + + $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); + ob_clean(); + $objWriter->save("php://output"); + exit; + } } diff --git a/backend/modules/card/views/user-card/view.php b/backend/modules/card/views/user-card/view.php index 4cb509f..0df20ca 100755 --- a/backend/modules/card/views/user-card/view.php +++ b/backend/modules/card/views/user-card/view.php @@ -1,7 +1,8 @@ params['breadcrumbs'][] = $this->title; ], ]) ?> +

+ $model->id, 'pdf' => true], ['class' => 'btn btn-primary']) ?> + $model->id], ['class' => 'btn btn-primary']) ?> +

+

Навыки

name; ?> diff --git a/composer.json b/composer.json index 4cce6ff..0800f79 100755 --- a/composer.json +++ b/composer.json @@ -34,7 +34,8 @@ "ext-json": "*", "kartik-v/yii2-widget-depdrop": "dev-master", "phpoffice/phpword": "^0.18.2", - "kartik-v/yii2-widget-fileinput": "@dev" + "kartik-v/yii2-widget-fileinput": "@dev", + "kartik-v/yii2-mpdf": "dev-master" }, "require-dev": { "yiisoft/yii2-debug": "~2.0.0", @@ -47,6 +48,9 @@ "process-timeout": 1800, "fxp-asset": { "enabled": false + }, + "allow-plugins": { + "yiisoft/yii2-composer": true } }, "repositories": [ diff --git a/composer.lock b/composer.lock index 8e42e86..0677ac9 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "26a8d9eb3ba346644b24ddee0391c211", + "content-hash": "8e1d1f250ee5ec02e15c3500ab6c4999", "packages": [ { "name": "2amigos/yii2-file-upload-widget", @@ -1365,6 +1365,69 @@ }, "time": "2021-09-03T10:16:59+00:00" }, + { + "name": "kartik-v/yii2-mpdf", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/kartik-v/yii2-mpdf.git", + "reference": "6a6506e680e4a07b1781da12bed9c080263f5f4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kartik-v/yii2-mpdf/zipball/6a6506e680e4a07b1781da12bed9c080263f5f4a", + "reference": "6a6506e680e4a07b1781da12bed9c080263f5f4a", + "shasum": "" + }, + "require": { + "mpdf/mpdf": "~8.1" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "kartik\\mpdf\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kartik Visweswaran", + "email": "kartikv2@gmail.com", + "homepage": "http://www.krajee.com/" + } + ], + "description": "A Yii2 wrapper component for the mPDF library which generates PDF files from UTF-8 encoded HTML.", + "homepage": "https://github.com/kartik-v/yii2-mpdf", + "keywords": [ + "component", + "extension", + "html", + "mpdf", + "pdf", + "utf8", + "yii2" + ], + "support": { + "issues": "https://github.com/kartik-v/yii2-mpdf/issues", + "source": "https://github.com/kartik-v/yii2-mpdf/tree/master" + }, + "funding": [ + { + "url": "https://opencollective.com/yii2-mpdf", + "type": "open_collective" + } + ], + "time": "2022-09-19T18:31:07+00:00" + }, { "name": "kartik-v/yii2-widget-depdrop", "version": "dev-master", @@ -1852,6 +1915,141 @@ }, "time": "2017-01-07T19:07:59+00:00" }, + { + "name": "mpdf/mpdf", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/mpdf/mpdf.git", + "reference": "a8a22f4874157e490d41b486053a20bec42e182c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/a8a22f4874157e490d41b486053a20bec42e182c", + "reference": "a8a22f4874157e490d41b486053a20bec42e182c", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-mbstring": "*", + "myclabs/deep-copy": "^1.7", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0", + "php-http/message-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/log": "^1.0 || ^2.0", + "setasign/fpdi": "^2.1" + }, + "require-dev": { + "mockery/mockery": "^1.3.0", + "mpdf/qrcode": "^1.1.0", + "squizlabs/php_codesniffer": "^3.5.0", + "tracy/tracy": "^2.4", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-bcmath": "Needed for generation of some types of barcodes", + "ext-xml": "Needed mainly for SVG manipulation", + "ext-zlib": "Needed for compression of embedded resources, such as fonts" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-only" + ], + "authors": [ + { + "name": "Matěj Humpál", + "role": "Developer, maintainer" + }, + { + "name": "Ian Back", + "role": "Developer (retired)" + } + ], + "description": "PHP library generating PDF files from UTF-8 encoded HTML", + "homepage": "https://mpdf.github.io", + "keywords": [ + "pdf", + "php", + "utf-8" + ], + "support": { + "docs": "http://mpdf.github.io", + "issues": "https://github.com/mpdf/mpdf/issues", + "source": "https://github.com/mpdf/mpdf" + }, + "funding": [ + { + "url": "https://www.paypal.me/mpdf", + "type": "custom" + } + ], + "time": "2022-08-15T08:15:09+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, { "name": "npm-asset/fullcalendar", "version": "3.8.0", @@ -1959,6 +2157,60 @@ }, "time": "2020-10-15T08:29:30+00:00" }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" + }, + "time": "2015-12-19T14:08:53+00:00" + }, { "name": "phpoffice/phpword", "version": "0.18.2", @@ -2071,6 +2323,109 @@ }, "time": "2021-06-04T20:58:45+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, { "name": "rmrevin/yii2-fontawesome", "version": "2.17.1", @@ -2169,6 +2524,78 @@ }, "time": "2020-01-28T05:01:22+00:00" }, + { + "name": "setasign/fpdi", + "version": "v2.3.6", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31", + "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "conflict": { + "setasign/tfpdf": "<1.31" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "setasign/fpdf": "~1.8", + "setasign/tfpdf": "1.31", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "~6.2" + }, + "suggest": { + "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." + }, + "type": "library", + "autoload": { + "psr-4": { + "setasign\\Fpdi\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Slabon", + "email": "jan.slabon@setasign.com", + "homepage": "https://www.setasign.com" + }, + { + "name": "Maximilian Kresse", + "email": "maximilian.kresse@setasign.com", + "homepage": "https://www.setasign.com" + } + ], + "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", + "homepage": "https://www.setasign.com/fpdi", + "keywords": [ + "fpdf", + "fpdi", + "pdf" + ], + "support": { + "issues": "https://github.com/Setasign/FPDI/issues", + "source": "https://github.com/Setasign/FPDI/tree/v2.3.6" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", + "type": "tidelift" + } + ], + "time": "2021-02-11T11:37:01+00:00" + }, { "name": "studio-42/elfinder", "version": "2.1.59", @@ -3770,64 +4197,6 @@ ], "time": "2021-10-05T13:56:00+00:00" }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, { "name": "phar-io/manifest", "version": "1.0.3", @@ -4638,59 +5007,6 @@ }, "time": "2021-11-05T16:47:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -6674,7 +6990,8 @@ "kavalar/hhapi": 20, "kartik-v/yii2-grid": 20, "kartik-v/yii2-widget-depdrop": 20, - "kartik-v/yii2-widget-fileinput": 20 + "kartik-v/yii2-widget-fileinput": 20, + "kartik-v/yii2-mpdf": 20 }, "prefer-stable": false, "prefer-lowest": false, @@ -6683,5 +7000,5 @@ "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" }