From 1f065647788890d02bb40d71c9065f6b42a2a5f6 Mon Sep 17 00:00:00 2001 From: magdev Date: Thu, 23 Aug 2018 16:44:53 +0200 Subject: [PATCH] Initial commit --- .gitignore | 14 + LICENSE | 20 + README.md | 29 + app/conf/.gitignore | 2 + app/conf/dossier.yaml | 85 + app/conf/parameters.yaml | 2 + app/conf/services.yaml | 59 + app/locale/messages.de.yaml | 190 ++ app/locale/messages.en.yaml | 117 ++ app/tpl/.gitignore | 1 + app/tpl/print/document.html.twig | 36 + app/tpl/print/favicon.ico | Bin 0 -> 2238 bytes app/tpl/print/favicon.png | Bin 0 -> 1188 bytes app/tpl/print/less/global.less | 603 ++++++ app/tpl/print/macros.html.twig | 50 + app/tpl/print/parts/certs.html.twig | 16 + app/tpl/print/parts/cover.html.twig | 10 + app/tpl/print/parts/cv.html.twig | 12 + app/tpl/print/parts/cv/entry.html.twig | 32 + app/tpl/print/parts/intro.html.twig | 37 + app/tpl/print/parts/pdf/footer.html.twig | 11 + app/tpl/print/parts/pdf/header.html.twig | 8 + app/tpl/print/parts/projects.html.twig | 25 + app/tpl/print/parts/resume.html.twig | 139 ++ app/tpl/server/favicon.ico | Bin 0 -> 2238 bytes app/tpl/server/favicon.png | Bin 0 -> 1188 bytes app/tpl/server/icons/html.base64.txt | 1 + app/tpl/server/icons/html.png | Bin 0 -> 838 bytes app/tpl/server/icons/pdf.base64.txt | 1 + app/tpl/server/icons/pdf.png | Bin 0 -> 658 bytes app/tpl/server/index.html.twig | 43 + app/tpl/server/less/global.less | 153 ++ bin/.gitignore | 4 + bin/dossier.php | 67 + composer.json | 68 + composer.lock | 1638 +++++++++++++++++ src/Analyzer/Base/AnalyzableInterface.php | 47 + src/Analyzer/Base/AnalyzerException.php | 39 + src/Analyzer/Base/AnalyzerInterface.php | 55 + src/Analyzer/ModelStatusAnalyzer.php | 72 + src/Application.php | 132 ++ src/Command/Base/BaseCommand.php | 174 ++ src/Command/Cache/CacheClearCommand.php | 75 + src/Command/Config/ConfigGetCommand.php | 139 ++ src/Command/Config/ConfigSetCommand.php | 85 + src/Command/Config/ConfigShowCommand.php | 131 ++ src/Command/Config/ConfigUnsetCommand.php | 73 + src/Command/Cv/CvAddCommand.php | 124 ++ src/Command/Cv/CvEditCommand.php | 70 + src/Command/Dev/PharExtractCommand.php | 66 + src/Command/Dossier/DossierBuildCommand.php | 133 ++ src/Command/Dossier/DossierInitCommand.php | 205 +++ src/Command/Dossier/DossierStatusCommand.php | 122 ++ src/Command/Intro/IntroAddCommand.php | 119 ++ src/Command/Intro/IntroEditCommand.php | 69 + src/Command/Person/PersonAddCommand.php | 119 ++ src/Command/Person/PersonEditCommand.php | 69 + src/Command/Server/ServerStartCommand.php | 143 ++ src/Command/Theme/ThemeDumpCommand.php | 108 ++ src/Command/Theme/ThemeListCommand.php | 72 + src/Config/ConfigLoader.php | 90 + src/Form/Base/BaseFormBuilder.php | 185 ++ src/Form/Base/DecoratableLabelInterface.php | 82 + src/Form/Base/FormBuilderInterface.php | 74 + src/Form/EmailFormBuilder.php | 85 + src/Form/EntryFormBuilder.php | 85 + src/Form/Extension/Field.php | 121 ++ src/Form/Extension/Form.php | 339 ++++ src/Form/Extension/FormDiscovery.php | 97 + src/Form/Field/BooleanField.php | 71 + src/Form/Field/SelectField.php | 100 + src/Form/Field/TextField.php | 37 + src/Form/InitFormBuilder.php | 80 + src/Form/IntroFormBuilder.php | 92 + src/Form/PersonFormBuilder.php | 105 ++ src/Form/Traits/DecoratableLabelTrait.php | 129 ++ src/Helper/ExportHelper.php | 220 +++ src/Helper/OutputHelper.php | 106 ++ src/Helper/SectionManagerHelper.php | 94 + src/Model/Base/AddressInterface.php | 88 + src/Model/Base/BaseCollection.php | 81 + src/Model/Base/BaseModel.php | 253 +++ src/Model/Base/ModelExportableInterface.php | 71 + src/Model/Base/ModelInterface.php | 37 + src/Model/Base/PhotoInterface.php | 72 + src/Model/CurriculumVitae.php | 240 +++ src/Model/CurriculumVitae/Entry.php | 357 ++++ .../CurriculumVitae/Entry/Certificate.php | 117 ++ src/Model/Intro.php | 154 ++ src/Model/Intro/Quote.php | 91 + src/Model/Person.php | 422 +++++ src/Model/Person/Contact.php | 85 + src/Model/Person/Reference.php | 192 ++ src/Model/Project.php | 91 + src/Model/Traits/AddressTrait.php | 149 ++ src/Model/Traits/MarkdownExportTrait.php | 78 + src/Model/Traits/PhotoTrait.php | 129 ++ src/Model/Traits/VarnameConverterTrait.php | 48 + src/Service/AnalyzerService.php | 147 ++ src/Service/ConfigService.php | 464 +++++ src/Service/Exceptions/ServiceException.php | 39 + src/Service/FormatterService.php | 98 + src/Service/MarkdownService.php | 213 +++ src/Service/MinifierService.php | 77 + src/Service/MonologService.php | 104 ++ src/Service/OutputHelperService.php | 178 ++ src/Service/PdfService.php | 176 ++ src/Service/PharHelperService.php | 186 ++ src/Service/StylesheetProcessorService.php | 301 +++ src/Service/TemplateService.php | 328 ++++ src/Service/TranslatorService.php | 154 ++ src/Service/UriHelperService.php | 174 ++ src/Style/DossierStyle.php | 287 +++ src/Util/Base/DataCollectorInterface.php | 83 + src/Util/DataCollector.php | 114 ++ 115 files changed, 13984 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/conf/.gitignore create mode 100644 app/conf/dossier.yaml create mode 100644 app/conf/parameters.yaml create mode 100644 app/conf/services.yaml create mode 100644 app/locale/messages.de.yaml create mode 100644 app/locale/messages.en.yaml create mode 100644 app/tpl/.gitignore create mode 100644 app/tpl/print/document.html.twig create mode 100644 app/tpl/print/favicon.ico create mode 100644 app/tpl/print/favicon.png create mode 100644 app/tpl/print/less/global.less create mode 100644 app/tpl/print/macros.html.twig create mode 100644 app/tpl/print/parts/certs.html.twig create mode 100644 app/tpl/print/parts/cover.html.twig create mode 100644 app/tpl/print/parts/cv.html.twig create mode 100644 app/tpl/print/parts/cv/entry.html.twig create mode 100644 app/tpl/print/parts/intro.html.twig create mode 100644 app/tpl/print/parts/pdf/footer.html.twig create mode 100644 app/tpl/print/parts/pdf/header.html.twig create mode 100644 app/tpl/print/parts/projects.html.twig create mode 100644 app/tpl/print/parts/resume.html.twig create mode 100644 app/tpl/server/favicon.ico create mode 100644 app/tpl/server/favicon.png create mode 100644 app/tpl/server/icons/html.base64.txt create mode 100644 app/tpl/server/icons/html.png create mode 100644 app/tpl/server/icons/pdf.base64.txt create mode 100644 app/tpl/server/icons/pdf.png create mode 100644 app/tpl/server/index.html.twig create mode 100644 app/tpl/server/less/global.less create mode 100644 bin/.gitignore create mode 100755 bin/dossier.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 src/Analyzer/Base/AnalyzableInterface.php create mode 100644 src/Analyzer/Base/AnalyzerException.php create mode 100644 src/Analyzer/Base/AnalyzerInterface.php create mode 100644 src/Analyzer/ModelStatusAnalyzer.php create mode 100644 src/Application.php create mode 100644 src/Command/Base/BaseCommand.php create mode 100644 src/Command/Cache/CacheClearCommand.php create mode 100644 src/Command/Config/ConfigGetCommand.php create mode 100644 src/Command/Config/ConfigSetCommand.php create mode 100644 src/Command/Config/ConfigShowCommand.php create mode 100644 src/Command/Config/ConfigUnsetCommand.php create mode 100644 src/Command/Cv/CvAddCommand.php create mode 100644 src/Command/Cv/CvEditCommand.php create mode 100644 src/Command/Dev/PharExtractCommand.php create mode 100644 src/Command/Dossier/DossierBuildCommand.php create mode 100644 src/Command/Dossier/DossierInitCommand.php create mode 100644 src/Command/Dossier/DossierStatusCommand.php create mode 100644 src/Command/Intro/IntroAddCommand.php create mode 100644 src/Command/Intro/IntroEditCommand.php create mode 100644 src/Command/Person/PersonAddCommand.php create mode 100644 src/Command/Person/PersonEditCommand.php create mode 100644 src/Command/Server/ServerStartCommand.php create mode 100644 src/Command/Theme/ThemeDumpCommand.php create mode 100644 src/Command/Theme/ThemeListCommand.php create mode 100644 src/Config/ConfigLoader.php create mode 100644 src/Form/Base/BaseFormBuilder.php create mode 100644 src/Form/Base/DecoratableLabelInterface.php create mode 100644 src/Form/Base/FormBuilderInterface.php create mode 100644 src/Form/EmailFormBuilder.php create mode 100644 src/Form/EntryFormBuilder.php create mode 100644 src/Form/Extension/Field.php create mode 100644 src/Form/Extension/Form.php create mode 100644 src/Form/Extension/FormDiscovery.php create mode 100644 src/Form/Field/BooleanField.php create mode 100644 src/Form/Field/SelectField.php create mode 100644 src/Form/Field/TextField.php create mode 100644 src/Form/InitFormBuilder.php create mode 100644 src/Form/IntroFormBuilder.php create mode 100644 src/Form/PersonFormBuilder.php create mode 100644 src/Form/Traits/DecoratableLabelTrait.php create mode 100644 src/Helper/ExportHelper.php create mode 100644 src/Helper/OutputHelper.php create mode 100644 src/Helper/SectionManagerHelper.php create mode 100644 src/Model/Base/AddressInterface.php create mode 100644 src/Model/Base/BaseCollection.php create mode 100644 src/Model/Base/BaseModel.php create mode 100644 src/Model/Base/ModelExportableInterface.php create mode 100644 src/Model/Base/ModelInterface.php create mode 100644 src/Model/Base/PhotoInterface.php create mode 100644 src/Model/CurriculumVitae.php create mode 100644 src/Model/CurriculumVitae/Entry.php create mode 100644 src/Model/CurriculumVitae/Entry/Certificate.php create mode 100644 src/Model/Intro.php create mode 100644 src/Model/Intro/Quote.php create mode 100644 src/Model/Person.php create mode 100644 src/Model/Person/Contact.php create mode 100644 src/Model/Person/Reference.php create mode 100644 src/Model/Project.php create mode 100644 src/Model/Traits/AddressTrait.php create mode 100644 src/Model/Traits/MarkdownExportTrait.php create mode 100644 src/Model/Traits/PhotoTrait.php create mode 100644 src/Model/Traits/VarnameConverterTrait.php create mode 100644 src/Service/AnalyzerService.php create mode 100644 src/Service/ConfigService.php create mode 100644 src/Service/Exceptions/ServiceException.php create mode 100644 src/Service/FormatterService.php create mode 100644 src/Service/MarkdownService.php create mode 100644 src/Service/MinifierService.php create mode 100644 src/Service/MonologService.php create mode 100644 src/Service/OutputHelperService.php create mode 100644 src/Service/PdfService.php create mode 100644 src/Service/PharHelperService.php create mode 100644 src/Service/StylesheetProcessorService.php create mode 100644 src/Service/TemplateService.php create mode 100644 src/Service/TranslatorService.php create mode 100644 src/Service/UriHelperService.php create mode 100644 src/Style/DossierStyle.php create mode 100644 src/Util/Base/DataCollectorInterface.php create mode 100644 src/Util/DataCollector.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1627966 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Eclipse specific files +.settings/ +.buildpath +.project + +# OS files +.directory +.DS_Store +Thumbs.db + +# App files +example/ +vendor/ +.env diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3f266d1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2018 Marco Grätsch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a687962 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# dossier + +Dossier is a commandline-tool to generate personal dossiers from a set of Markdown files. It creates a single print-first HTML-File which can be printed to PDF with your favorite browser. There is also a integration with PDFShift, but it might requires a paid subscription. + + +## Install + +### Dependencies + +Dossier requires PHP 7.2+ and the following extensions enabled: + +* Phar +* SPL +* Date +* fileinfo +* mbstring +* Bz2 + +### Use the Phar-Archive + +The easiest way to install dossier is to download the Phar-Archive from the Releases page and copy it somewhere in your $PATH and make it executable. Open a console and type `dossier.phar` to see a list of available commands. To find out more about a command type `dossier.phar help `. + + +## License + +Copyright (c) 2018 Marco Grätsch +This work is licensed under the MIT-License. + + diff --git a/app/conf/.gitignore b/app/conf/.gitignore new file mode 100644 index 0000000..b2b4a83 --- /dev/null +++ b/app/conf/.gitignore @@ -0,0 +1,2 @@ +/dossier_dev.yaml +/dossier_prod.yaml diff --git a/app/conf/dossier.yaml b/app/conf/dossier.yaml new file mode 100644 index 0000000..21a7868 --- /dev/null +++ b/app/conf/dossier.yaml @@ -0,0 +1,85 @@ +### Settings file for magdev/dossier +charset: utf-8 + +# Date formats +date: + format: + long: "d. F Y" + short: "d.m.Y" + +# Settings for TranslatorService +translator: + locale: en + fallback_locales: + - en + - de + +# Settings for the CV +cv: + default_tag: experience + tags: + - experience + - education + - other + +# Form settings +form: + label: + length: 40 + prefix: ' ' + +# Available language levels +language: + default_level: native + levels: + - native + - fluent + - good + - beginner + +# Monolog settings +monolog: + log_level: 200 + skip_class_partials: + - 'Magdev\\Dossier\\' + - 'Symfony\\Component\\' + +# Output styles +style: + dossier_status_thresholds: + - { min: 0, max: 54, color: 'lightred' } + - { min: 55, max: 74, color: 'lightyellow' } + - { min: 75, max: 100, color: 'lightgreen' } + + +# Settings for external editor +editor: + command: '/usr/bin/kate %s' + +# PDFShift settings +pdfshift: + apikey: '' + page: + format: A4 + margin: + left: 0 + right: 0 + top: 0 + bottom: 0 + header: + spacing: 20px + footer: + spacing: 20px + security: + author: '' + userPassword: '' + ownerPassword: '' + noPrint: false + noCopy: false + noModify: true + stylesheet: + use_print: true + http: + user_agent: '' + + \ No newline at end of file diff --git a/app/conf/parameters.yaml b/app/conf/parameters.yaml new file mode 100644 index 0000000..3e5b667 --- /dev/null +++ b/app/conf/parameters.yaml @@ -0,0 +1,2 @@ +parameters: + scss.formatter: "\\Leafo\\ScssPhp\\Formatter\\Crunched" \ No newline at end of file diff --git a/app/conf/services.yaml b/app/conf/services.yaml new file mode 100644 index 0000000..f00dadc --- /dev/null +++ b/app/conf/services.yaml @@ -0,0 +1,59 @@ +imports: + - { resource: 'parameters.yaml' } + - { resource: '/etc/dossier/parameters.yaml', ignore_errors: true } + +services: + + config: + class: '\Magdev\Dossier\Service\ConfigService' + + monolog: + class: '\Magdev\Dossier\Service\MonologService' + arguments: ['@config'] + + phar_helper: + class: '\Magdev\Dossier\Service\PharHelperService' + arguments: ['@monolog'] + + minifer: + class: '\Magdev\Dossier\Service\MinifierService' + arguments: ['@monolog'] + + translator: + class: '\Magdev\Dossier\Service\TranslatorService' + arguments: ['@config', '@monolog'] + + uri_helper: + class: '\Magdev\Dossier\Service\UriHelperService' + arguments: ['@monolog', '@phar_helper'] + + formatter: + class: '\Magdev\Dossier\Service\FormatterService' + arguments: ['@translator'] + + markdown: + class: '\Magdev\Dossier\Service\MarkdownService' + arguments: ['@monolog', '@formatter'] + + output_helper: + class: '\Magdev\Dossier\Service\OutputHelperService' + arguments: ['@translator'] + + template: + class: '\Magdev\Dossier\Service\TemplateService' + arguments: ['@markdown', '@translator', '@minifer', '@config', '@monolog'] + + cssproc: + class: '\Magdev\Dossier\Service\StylesheetProcessorService' + arguments: ['@monolog', '@template', '%scss.formatter%'] + + analyzer: + class: '\Magdev\Dossier\Service\AnalyzerService' + arguments: ['@config', '@monolog'] + + pdf: + class: '\Magdev\Dossier\Service\PdfService' + arguments: ['@config', '@monolog', '@template'] + + + \ No newline at end of file diff --git a/app/locale/messages.de.yaml b/app/locale/messages.de.yaml new file mode 100644 index 0000000..780dfc4 --- /dev/null +++ b/app/locale/messages.de.yaml @@ -0,0 +1,190 @@ +app: + header: 'Persönliches Dossier aus Markdown-Dateien erstellen' + +date: + start: 'Beginn' + end: 'Ende' + until: 'bis' + today: 'heute' + + format: + year: "Ein Jahr|%y Jahre" + month: "Ein Monat|%m Monate" + day: "Ein Tag|%d Tage" +info: + debug_mode: 'DEBUG MODE ' + environment: 'ENVIRONMENT ' + +toc: + resume: 'Einseitiges Résumé' + cv: 'Curriculum Vitae' + certs: 'Zeugnisse und Zertifikate' + projects: 'Aktuelle Seitenprojekte' + +form: + init: + header: 'Neues Dossier initialisieren' + use_userstyles: 'Möchten sie benutzerdefinierte Stylesheets verwenden?' + style_type: 'Preprocessor Typ' + intro: + header: + add: 'Einleitungsseite erstellen' + edit: 'Einleitungsseite bearbeiten' + text: 'Bitte geben sie den Einleitungstext ein' + add_quotes: 'Möchten sie Zitate hinzufügen?' + quote_text: 'Zitat' + quote_author: 'Autor des Zitats' + show_quotes: 'Wo sollen die Zitate angezeigt werden?' + person: + header: + add: 'Persönliche Daten erstellen' + edit: 'Persönliche Daten bearbeiten' + firstname: 'Vorname' + lastname: 'Nachname' + nationality: 'Nationalität' + birthdate: 'Geburtsdatum (YYYY-MM-DD)' + birthplace: 'Geburtsort' + residence: 'Aktueller Wohnort' + status: 'Familientstand' + tagline: 'Tagline' + work_license: 'Lizenz' + language: 'Sprache' + level: 'Grad' + text: 'Kurzbiographie' + add_languages: 'Möchten sie Sprachen hinzufügen?' + projects: 'Seitenprojekte' + interests: 'Persönliche Interessen' + links: 'Links' + cv: + header: + add: 'CV-Eintrag erstellen' + edit: 'CV-Eintrag bearbeiten' + text: 'Bitte geben sie einen Text ein' + start_date: 'Start-Datum (YYYY-MM-DD)' + end_date: 'End-Datum (YYYY-MM-DD)' + position: 'Position' + company: 'Unternehmen' + industry: 'Branche' + qualification: 'Abschluss' + tag: 'Tag' + skills: 'Fertigkeiten und Kenntnisse' + achievements: 'Erreichte Ziele' + toolbox: 'Werkzeuge' + use_in_resume: 'In Résumé verwenden?' +cover: + subtitle: 'Bewerbungsdossier' + +intro: + toc: 'Auf den folgenden Seiten finden sie als Beilagen:' + +projects: + header: 'Aktuelle Projekte' + fields: + status: 'Status' + role: 'Rolle' + status: + development: 'In Entwicklung' + production: 'Produktivbetrieb' + private: 'Privat' + published: 'Veröffentlicht' + eol: 'Nicht mehr im Einsatz' + +cv: + header: 'Curriculum Vitae' + headers: + education: "Schule, Aus- und Weiterbildung" + experience: 'Berufserfahrung' + other: 'Sonstiges' + entry: + qualification: "Abschluss:" + skills: 'Erworbene Fähigkeiten und Kenntnisse:' + achievements: 'Erreichte Ziele' + +resume: + header: 'Résumé' + headers: + skills: 'Kenntnisse und Fähigkeiten' + personal: 'Persönliche Informationen' + links: 'Links' + contact: 'Kontaktdaten' + achievements: 'Erreichte Ziele' + experience: 'Berufserfahrung' + qualification: 'Qualifikationen' + bio: 'Bio' + toolbox: 'Werkzeuge' + personal_interest: 'Persönliche Interessen' + current_projects: 'Aktuelle Seitenprojekte' + references: Referenzen + personal: + name: 'Name' + birthdate: 'Geboren am' + birthplace: 'in' + status: 'Familienstatus' + nationality: 'Nationalität' + languages: 'Sprachen' + residence: 'Akt. Wohnort' + work_license: 'Lizenz' + language: + level: + native: 'Muttersprache' + fluent: 'Flüssig' + good: 'Gut' + contact: + email: 'E-Mail' + phone: 'Telefon' + chat: 'Hangouts' + +certs: + header: 'Zeugnisse und Zertifikate' + +server: + index: + header: 'Dossier' + title: 'Dossier Übersicht' + filesize: 'Dateigrösse' + filetime: 'Erstellt am' + new_window: 'In neuen Fenster/Tab öffnen' + +message: + input: + required_value: 'Dieser Wert ist erforderlich' + invalid_date: 'Ungültiges Datum' + invalid_tag: 'Ungültige Kategorie: %s' + build: + success: 'Ihr persönliches Dossier wurde erfoglreich erstellt' + dump: + success: 'Eine lokale Kopie des Themes %theme% wurde erfolgreich erstellt' + export: + template_dir: 'Bitte tragen sie folgendes in ihre .bashrc oder .profile ein:' + template_homedir: 'Die Dateien wurden nach ~/.dossier/tpl kopiert' + code: + template_environment: 'export DOSSIER_THEME_DIR="%path%"' + entry: + success: 'Der CV-Eintrag wurde erfolgreich erstellt' + command: + initialized: 'Umgebung initiaisiert' + output_file: 'Ausgabe-Datei' + locale: 'Verwende Sprache: %locale%' + theme: 'Verwende Theme: %theme%' + stylesheet: + less: 'LESS-Stylesheet gefunden' + scss: 'SCSS-Stylesheet gefunden' + model: + person: 'Person-Model geladen' + intro: 'Intro-Model geladen' + letter: 'Letter-Model geladen' + cv: 'CV mit %count% Einträgen geladen' + config: + deleted: 'Konfigurationseintrag %path% wurde gelöscht oder auf den Standardwert zurückgesetzt' + write: + success: 'Datei %name% erfolgreiche gespeichert' + html: + created: 'HTML-Dokument in %file% erstellt' + pdf: + created: 'PDF-Dokument in %file% erstellt' + +pdf: + page: + title: '{{title}}' + number: '{{page}}' + date: '{{date}}' diff --git a/app/locale/messages.en.yaml b/app/locale/messages.en.yaml new file mode 100644 index 0000000..9b838fc --- /dev/null +++ b/app/locale/messages.en.yaml @@ -0,0 +1,117 @@ +app: + header: 'Create a personal dossier from Markdown files' + +date: + start: 'Begin' + end: 'End' + until: 'until' + today: 'today' + + format: + year: "One year|%y years" + month: "One month|%m months" + day: "One day|%d days" + +info: + debug_mode: 'DEBUG MODE ' + environment: 'ENVIRONMENT ' + +cover: + subtitle: 'Personal Dossier' + +cv: + header: 'Curriculum Vitae' + headers: + education: "Education" + experience: 'Job Experience' + other: 'Other' + entry: + qualification: "Degree:" + skills: 'Obtained skills:' + achievements: 'Achievements' + question: + intro: 'Bitte geben sie die entsprechenden Daten ein:' + start_date: ' An welchem Tag begann die Tätigkeit? ' + end_date: ' An welchem Tag endete die Tätigkeit? ' + tag: ' Zu welcher Kategorie gehört der Eintrag? ' + position: ' Welche Position haben sie bekleidet? ' + company: ' Wie heisst die Firma, bei der sie angestellt waren? ' + industry: ' In welcher Branche waren sie tätig? ' + achievements: ' Welche Ziele haben sie während der Tätigkeit erreicht? ' + qualification: ' Welche Qualification haben sie erreicht? ' + skills: ' Welche fertigkeiten und Kenntnisse haben sie erworben? ' + notes: ' Notizen zu diesem Eintrag: ' + description: ' Beschreiben sie ihre Tätigkeiten: ' + use_in_resume: ' Soll dieser Eintrag im Résumé verwendet werden? ' + +resume: + header: 'Résumé' + headers: + skills: 'Skills' + personal: 'Personal Information' + links: 'Links' + contact: 'Contact' + achievements: 'Achievements' + experience: 'Job Experience' + qualification: 'Qualifications' + bio: 'Bio' + toolbox: 'Toolbox' + personal_interest: 'Personal Interests' + current_projects: 'Current Sideprojects' + personal: + name: 'Name' + birthdate: 'born at' + birthplace: 'in' + status: 'Familiy status' + nationality: 'Nationality' + languages: 'Languagues' + residence: 'Current Residence' + work_license: 'License' + language: + level: + native: 'native' + fluent: 'fluent' + good: 'good' + rookie: 'rookie' + contact: + email: 'E-Mail' + phone: 'Phone' + chat: 'Hangouts' + +certs: + header: 'Certificates' + +message: + input: + required_value: 'This value is required' + invalid_date: 'Invalid date' + invalid_tag: 'Invalid tag: %s' + build: + success: 'Your personal dossier has been successfully built' + dump: + success: 'A local copy of the theme %theme% was created successfully' + export: + template_dir: 'Please add the following to your .bashrc or .profile file:' + template_homedir: 'The files are copied to ~/.dossier/tpl' + code: + template_environment: 'export DOSSIER_THEME_DIR="%path%"' + entry: + success: 'Der CV-Eintrag wurde erfolgreich erstellt' + command: + initialized: 'Environment loaded' + output_file: 'Output-File' + locale: 'Using locale: %locale%' + theme: 'Using theme: %theme%' + stylesheet: + less: 'LESS-Stylesheet found' + scss: 'SCSS-Stylesheet found' + model: + person: 'Person-Model loaded' + intro: 'Intro-Model loaded' + cv: 'CV with %count% entries loaded' + config: + deleted: 'Configuration value %path% successfully deleted or resetted to default value' + write: + success: 'File %name% successfully written' + + diff --git a/app/tpl/.gitignore b/app/tpl/.gitignore new file mode 100644 index 0000000..c5f75ae --- /dev/null +++ b/app/tpl/.gitignore @@ -0,0 +1 @@ +/latex/ diff --git a/app/tpl/print/document.html.twig b/app/tpl/print/document.html.twig new file mode 100644 index 0000000..85f1fb2 --- /dev/null +++ b/app/tpl/print/document.html.twig @@ -0,0 +1,36 @@ + + + + + + + {% if favicon %}{% endif %} + {{ 'cover.subtitle'|trans }} | {{ person.name }} + + + + {% if is_disabled(disabled.cover) == false %} + {{ include('parts/cover.html.twig') }} + {% endif %} +
+ {% if is_disabled(disabled.intro) == false %} + {{ include('parts/intro.html.twig') }} + {% endif %} + {% if is_disabled(disabled.resume) == false %} + {{ include('parts/resume.html.twig') }} + {% endif %} + {% if is_disabled(disabled.projects) == false %} + {{ include('parts/projects.html.twig') }} + {% endif %} + {% if is_disabled(disabled.cv) == false %} + {{ include('parts/cv.html.twig') }} + {% endif %} + {% if is_disabled(disabled.certs) == false %} + {{ include('parts/certs.html.twig') }} + {% endif %} +
+ + diff --git a/app/tpl/print/favicon.ico b/app/tpl/print/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7f7ab548a9c85d585e9e201454f16f6da50b37ce GIT binary patch literal 2238 zcmc&$XLyrU6n+^3f{HlMCizBM1d0NRKpiNcxT+xH0CC_J2P&wbtgdvVZJM++ZIV(; zk&Sc!)t$>U+ZT4&yeJJNkno=nI@sDqwlY8%Z&v(!Ko&@MbAD%}Lt9k%^ zX*ZCBCmBQ138W;%cMUEbzFJyZ;8+j=-wruEt7FkzUyVQ&2jAxDFzN=uf20@}?T6uA z!NQ#*hPh}Iyqo5sK7)t1YBGFfgAh1X3U}!=1oo+6DVv1Aj+yWjN8@aM6wK<8@a#{A zElq;vt|SqfDrdmDbS&JNV)&}#;Vqepz#bhuWUtpn!Mi3B_FNWC)pKCd#UOB? z82S_*#tiaTLB1+y!?k5T3yOppl6v2?p!kofDFXs@bi~$RdA547|%2_}8&GPkDM*vv3x2IIHbPcSpljJ`J`cF&e3s z9<2oajg%AFIuk@NQ7i_kky|B3Lpl!wiJ9u{Sj3=_axrD|sMAKmtf4)v&2?31KB0kc zXF42|i#<*RE5&O~p!j4WSP~_0$mpCzYYOEdV_;2|z?w?Doa&v*z?C6}DUF3yPB~^! z{S{*9$)`I@0$V24MM3kHLp@PaY_xahQr?uOUMYoB&A_3i*mVpnIXtYn9PIfl&gDhH zs^MVCeWQGwa`1^rqxApdRNgb z)B9pnQB6rKG#{QqhWbT)(nLZ}vHid3{A1_N*Nb33;lNkRgk@Ssn;{1Y<5rCO>w95y zaM4v3D+Mf{yJ}6=q1D0t$}0@!30QaE;h$bvcjV=@!PC5U2FC=H&CES9tE@zPe12*0 z{9K#C1LcI1qm=3w)}MT5!-9W4+$bo@%fkjg3%F%i7?lf$4GXGT`MlEtMn`;|uX#*+ z=C!l`J~?&jtAgs6kiktsJa~KWiume}&L>pWB@P%6w^>kz_+NwQ|K|run|_m7tWk}& z;lp+McS#%KV?*dV@sTZ07ffHg-S+X0hql%j>tkbsyrH2LgC8Aw^Ydfxe^@bPX_uXE zyhmD;UES|^G4kzuGi$$m>i2DemKS*YWxRFI6Z^*WnDE0N%rimdCjy_`h7pq{ z&;FeK;}`rWuIZLjOuJ73z}stM9a38U|KcRLG54jdF6R)qLoVa&NL zBjf!&Gj0u^dxdzDycIDwh&b-`B{AW%Jj7#s7=4O+_LTGqpT@V+$T@dSq=tD&uZcDq zIQ3>nw4;IS4!D8_9={4#(RBRg@5|`OhBV!d9_@BL?!W2jw?BmD(Jd`CUFe?xS}p={ q&A@0Mz}bP`f}8=mx0f2AOM7Y03H$JK!X3h0!kxn1K_7yzR$Ky_VHdRk literal 0 HcmV?d00001 diff --git a/app/tpl/print/favicon.png b/app/tpl/print/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..71235d5346e86edf99bb4056953184fd2b8c96c3 GIT binary patch literal 1188 zcmV;V1Y7%wP)m4A(zz|1|l z6=t>_sQ#BScgpli^Rt!TmrY>Sx7|w!VILwhM!A*`3QL=w%N!Vyz|8M@9@>xF}6WSDv+d+gQ7|jjmjt4;H3LYxuLc zAn~^cm7wm+u7x=Fk-%_PKPAwab3Qq8k;|QVE?tk=`pe&R<;9}O!=EkM{jtVaje~O54`%|T~wztRHZV!Hm`;#g5zy5=7A7JgeV>o zBP3)?s-SLLS7*6hZ+zNVH9N3yY5>Hqtv!5mx|>{L$P5U`z(X2^^kChuvw3aR#C{Qw zt1PQd!_(7^>;$7H7O{(LO@=3DR8o;L<5~A`6_&)1#3dN+y<~dnxz2+P``Rs- zn&O2yfupSvJAS*)Zet(|6HCZHYAV&<^mJy-*Q??2_#&Ap`Y7_ z?lhLw2DTo#M*EEjVVD`Yym75Nq3LQ46$AY7u`Waav!Y|&Y(h8T&JR`v`-jTf2`N}s zm*VrrtF(9Kk%I|vD?rPT3%oF%yj5S##`-Gc6!uiKBA!Y6O9&{o-9y#wBU1y%+9ED? zMz~wSp#qK}54abe5drRj?pSokLT*TgyA8n9?h*nmuTMCRb8@hDb_N3PIqjonDl z9jRDZ^y+^z*G(ISo(Ck$zJKE|Qhnd;RMJE6e6hZJ>l~~%(QYMN-|r>sP|F+Di~G)r zVZc)0BbyKIlJ^1;v=h zw{!Enf-SwUq2@r@LuvNij>qKe0;csl;4uLojq_GR&$n!xba>QbdA6Zru2QxGsoz*` zN-#9Cb8$2ke9hTScZ_~4?}K8s4IQf`w)E|kh8GfiFz3c8q0OxglXezc*4X?ttKD>E zz7tji>?xr-GiIs)-z;cG{G3Yro|cBmjr_mLT>k)Vh810tHB + {% for quote in quotes %} +
+ {{ quote.quoteText }} + {% if quote.quoteAuthor %} + {{ quote.quoteAuthor }} + {% endif %} +
+ {% endfor %} + +{% endmacro %} + + +{% macro list_simple_array(entries, tag) %} + {% set tag = tag|default('li') %} + {% for line in entries %} + <{{ tag }}>{{ line|inlinemd }} + {% endfor %} +{% endmacro %} + + +{% macro list_link_array(entries, tag) %} + {% set tag = tag|default('li') %} + {% for link in entries %} + <{{ tag }}>{{ link }} + {% endfor %} +{% endmacro %} + + +{% macro list_entry_attribute(entries, attribute, tag) %} + {% set tag = tag|default('li') %} + {% for entry in entries %} + {% if attribute(entry, attribute)|length > 0 %} + {% for line in attribute(entry, attribute) %} + <{{ tag }}>{{ line|inlinemd }} + {% endfor %} + {% endif %} + {% endfor %} +{% endmacro %} + + +{% macro list_references(references) %} + {% for reference in references %} +
  • + +
  • + {% endfor %} +{% endmacro %} + diff --git a/app/tpl/print/parts/certs.html.twig b/app/tpl/print/parts/certs.html.twig new file mode 100644 index 0000000..0c76720 --- /dev/null +++ b/app/tpl/print/parts/certs.html.twig @@ -0,0 +1,16 @@ +
    +

    {{ 'certs.header'|trans }}

    + {% for entry in cv.filterByCertificates() %} + {% for cert in entry.certificates %} +
    +
    +
    +

    {{ entry.position }} {% if cert.type %}- {{ cert.type }}{% endif %} + {{ entry.endDate.format('Y') }} - {{ entry.company }}

    +
    + {{ cert.fileObject.filename }} +
    +
    + {% endfor %} + {% endfor %} +
    \ No newline at end of file diff --git a/app/tpl/print/parts/cover.html.twig b/app/tpl/print/parts/cover.html.twig new file mode 100644 index 0000000..e8d799e --- /dev/null +++ b/app/tpl/print/parts/cover.html.twig @@ -0,0 +1,10 @@ +
    +
    +
     
    +
    +

    {{ person.name }}

    +

    {{ person.tagline|splitmerge|raw }}

    +

    {{ 'cover.subtitle'|trans }}

    +
    +
    +
    diff --git a/app/tpl/print/parts/cv.html.twig b/app/tpl/print/parts/cv.html.twig new file mode 100644 index 0000000..3e16923 --- /dev/null +++ b/app/tpl/print/parts/cv.html.twig @@ -0,0 +1,12 @@ +
    +

    {{ 'cv.header'|trans }}

    + + {% for tag in tags %} +
    +

    {{ ('cv.headers.' ~ tag)|trans }}

    + {% for entry in cv.filterByTag(tag) %} + {{ include('parts/cv/entry.html.twig') }} + {% endfor %} +
    + {% endfor %} +
    \ No newline at end of file diff --git a/app/tpl/print/parts/cv/entry.html.twig b/app/tpl/print/parts/cv/entry.html.twig new file mode 100644 index 0000000..7a7eebd --- /dev/null +++ b/app/tpl/print/parts/cv/entry.html.twig @@ -0,0 +1,32 @@ +
    +
    +

    + {{ entry.startDate.format(config('date.format.short')) }} + {{ 'date.until'|trans }} + {% if is_today(entry.endDate) %} + {{ 'date.today'|trans }} + {% else %} + {{ entry.endDate.format(config('date.format.short')) }} + {% endif %} + +

    +
    +
    +

    {{ entry.position }} {% if entry.industry %}({{ entry.industry }}){% endif %}

    +

    {{ entry.company }}

    + {% if entry.description %} +
    + {{ entry.description|raw }} +
    + {% endif %} + {% if entry.qualification %} +

    {{ 'cv.entry.qualification'|trans }}
    {{ entry.qualification }}

    + {% endif %} + {% if entry.skills|length > 0 %} +

    {{ 'cv.entry.skills'|trans }}
    {{ entry.skills|merge|inlinemd }}

    + {% endif %} + {% if entry.achievements|length > 0 %} +

    {{ 'cv.entry.achievements'|trans }}
    {{ entry.achievements|merge|inlinemd }}

    + {% endif %} +
    +
    \ No newline at end of file diff --git a/app/tpl/print/parts/intro.html.twig b/app/tpl/print/parts/intro.html.twig new file mode 100644 index 0000000..b26a2ee --- /dev/null +++ b/app/tpl/print/parts/intro.html.twig @@ -0,0 +1,37 @@ +
    + {% import "macros.html.twig" as macros %} + + {% if is_disabled(disabled.quotes) == false and intro.quotes|length > 0 and intro.showQuotes == 'top' %} + {{ macros.show_quotes(intro.quotes, intro.showQuotes) }} + {% endif %} + +
    + {% if intro.headline %}

    {{ intro.headline }}

    {% endif %} + {% if intro.hasPhoto() %} + {{ person.name }} + {% endif %} + {{ intro.content|raw }} +
    + + {% if is_disabled(disabled.quotes) == false and intro.quotes|length > 0 and intro.showQuotes == 'bottom' %} + {{ macros.show_quotes(intro.quotes, intro.showQuotes) }} + {% endif %} + + {% if is_disabled(disabled.toc) == false %} +

    {{ 'intro.toc'|trans }}

    +
      + {% if is_disabled(disabled.resume) == false %} +
    • {{ 'toc.resume'|trans }}
    • + {% endif %} + {% if is_disabled(disabled.projects) == false %} +
    • {{ 'toc.projects'|trans }}
    • + {% endif %} + {% if is_disabled(disabled.cv) == false %} +
    • {{ 'toc.cv'|trans }}
    • + {% endif %} + {% if is_disabled(disabled.certs) == false %} +
    • {{ 'toc.certs'|trans }}
    • + {% endif %} +
    + {% endif %} +
    diff --git a/app/tpl/print/parts/pdf/footer.html.twig b/app/tpl/print/parts/pdf/footer.html.twig new file mode 100644 index 0000000..474157e --- /dev/null +++ b/app/tpl/print/parts/pdf/footer.html.twig @@ -0,0 +1,11 @@ +
    +
    + +
    +
    + {{ 'pdf.page.number'|trans|raw }} +
    +
    + +
    +
    \ No newline at end of file diff --git a/app/tpl/print/parts/pdf/header.html.twig b/app/tpl/print/parts/pdf/header.html.twig new file mode 100644 index 0000000..f88ac96 --- /dev/null +++ b/app/tpl/print/parts/pdf/header.html.twig @@ -0,0 +1,8 @@ +
    +
    + {{ 'pdf.page.title'|trans|raw }} +
    +
    + {{ 'pdf.page.date'|trans|raw }} +
    +
    \ No newline at end of file diff --git a/app/tpl/print/parts/projects.html.twig b/app/tpl/print/parts/projects.html.twig new file mode 100644 index 0000000..eb173a7 --- /dev/null +++ b/app/tpl/print/parts/projects.html.twig @@ -0,0 +1,25 @@ +{% if projects|length > 0 %} +
    +

    {{ 'projects.header'|trans }}

    + +
    + {% for project in projects %} +
    +

    {{ project.name }} {% if project.stack %}({{ project.stack }}){% endif %}

    +
    +
    {{ 'projects.fields.status'|trans }}
    +
    +

    {{ ('projects.status.' ~ project.status)|trans }}

    +
    + {% if project.role %} +
    {{ 'projects.fields.role'|trans }}
    +
    {{ project.role }}
    + {% endif %} +
    +

    {{ project.shortDescription }}

    + {{ project.content|raw }} +
    + {% endfor %} +
    +
    +{% endif %} \ No newline at end of file diff --git a/app/tpl/print/parts/resume.html.twig b/app/tpl/print/parts/resume.html.twig new file mode 100644 index 0000000..9a5993e --- /dev/null +++ b/app/tpl/print/parts/resume.html.twig @@ -0,0 +1,139 @@ +{% set useInResume = cv.filterByUseInResume() %} +{% set toolbox = cv.filterByToolbox() %} +{% import "macros.html.twig" as macros %} + +
    +

    {{ 'resume.header'|trans }}

    +
    +
    + + +

    {{ 'resume.headers.personal'|trans }}

    +
    +
    {{ 'resume.personal.name'|trans }}
    +
    {{ person.getName(true) }}
    +
    {{ 'resume.personal.birthdate'|trans }}
    +
    {{ person.birthdate.format(config('date.format.long')) }}
    +
    {{ 'resume.personal.birthplace'|trans }}
    +
    {{ person.birthplace }}
    +
    {{ 'resume.personal.residence'|trans }}
    +
    {{ person.residence }}
    +
    {{ 'resume.personal.status'|trans }}
    +
    {{ person.status }}
    +
    {{ 'resume.personal.nationality'|trans }}
    +
    {{ person.nationality }}
    + {% if person.workLicense %} +
    {{ 'resume.personal.work_license'|trans }}
    +
    {{ person.workLicense }}
    + {% endif %} + {% if person.languages|length > 0 %} +
    {{ 'resume.personal.languages'|trans }}
    +
    +
      + {% for lang in person.languages %} +
    • {{ lang.language }} ({{ ('resume.language.level.' ~ lang.level)|trans }})
    • + {% endfor %} +
    +
    + {% endif %} +
    + + + {% if person.contacts|length > 0 %} +

    {{ 'resume.headers.contact'|trans }}

    +
    + {% for contact in person.contacts %} + {% set type = contact.type %} + {% if contact.type == 'email' or contact.type == 'phone' %} + {% set type = ('resume.contact.' ~ contact.type)|trans %} + {% endif %} +
    {{ type }}
    +
    {{ contact.address }}
    + {% endfor %} +
    + {% endif %} + + +

    {{ 'resume.headers.experience'|trans }}

    +
    + {% for industry, length in cv.getExperienceYears() %} +
    {{ industry }}
    +
    {{ length }}
    + {% endfor %} +
    + + + {% if person.content %} +

    {{ 'resume.headers.bio'|trans }}

    +
    {{ person.content|raw }}
    + {% endif %} + + +

    {{ 'resume.headers.qualification'|trans }}

    +
      + {% for entry in cv.qualifications %} +
    • {{ entry.qualification|splitmerge(',', '
    • ') }}
    • + {% endfor %} +
    + + + {% if toolbox|length > 0 %} +

    {{ 'resume.headers.toolbox'|trans }}

    +
      + {% for entry in toolbox %} + {{ macros.list_simple_array(entry.toolbox) }} + {% endfor %} +
    + {% endif %} + + + {% if person.interests|length > 0 %} +

    {{ 'resume.headers.personal_interest'|trans }}

    +
      + {{ macros.list_simple_array(person.interests) }} +
    + {% endif %} +
    + + + +
    + + + + {% if person.links|length > 0 %} +

    {{ 'resume.headers.links'|trans }}

    +
      + {{ macros.list_link_array(person.links) }} +
    + {% endif %} + + + {% if person.references|length > 0 %} +

    {{ 'resume.headers.references'|trans }}

    +
      + {{ macros.list_references(person.references) }} +
    + {% endif %} + + {% if person.projects|length > 0 %} +

    {{ 'resume.headers.current_projects'|trans }}

    +
      + {{ macros.list_simple_array(person.projects) }} +
    + {% endif %} + + {% if useInResume|length > 0 %} +

    {{ 'resume.headers.skills'|trans }}

    +
      + {{ macros.list_entry_attribute(useInResume, 'skills') }} +
    + +

    {{ 'resume.headers.achievements'|trans }}

    +
      + {{ macros.list_entry_attribute(useInResume, 'achievements') }} +
    + {% endif %} +
    +
    +
    diff --git a/app/tpl/server/favicon.ico b/app/tpl/server/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7f7ab548a9c85d585e9e201454f16f6da50b37ce GIT binary patch literal 2238 zcmc&$XLyrU6n+^3f{HlMCizBM1d0NRKpiNcxT+xH0CC_J2P&wbtgdvVZJM++ZIV(; zk&Sc!)t$>U+ZT4&yeJJNkno=nI@sDqwlY8%Z&v(!Ko&@MbAD%}Lt9k%^ zX*ZCBCmBQ138W;%cMUEbzFJyZ;8+j=-wruEt7FkzUyVQ&2jAxDFzN=uf20@}?T6uA z!NQ#*hPh}Iyqo5sK7)t1YBGFfgAh1X3U}!=1oo+6DVv1Aj+yWjN8@aM6wK<8@a#{A zElq;vt|SqfDrdmDbS&JNV)&}#;Vqepz#bhuWUtpn!Mi3B_FNWC)pKCd#UOB? z82S_*#tiaTLB1+y!?k5T3yOppl6v2?p!kofDFXs@bi~$RdA547|%2_}8&GPkDM*vv3x2IIHbPcSpljJ`J`cF&e3s z9<2oajg%AFIuk@NQ7i_kky|B3Lpl!wiJ9u{Sj3=_axrD|sMAKmtf4)v&2?31KB0kc zXF42|i#<*RE5&O~p!j4WSP~_0$mpCzYYOEdV_;2|z?w?Doa&v*z?C6}DUF3yPB~^! z{S{*9$)`I@0$V24MM3kHLp@PaY_xahQr?uOUMYoB&A_3i*mVpnIXtYn9PIfl&gDhH zs^MVCeWQGwa`1^rqxApdRNgb z)B9pnQB6rKG#{QqhWbT)(nLZ}vHid3{A1_N*Nb33;lNkRgk@Ssn;{1Y<5rCO>w95y zaM4v3D+Mf{yJ}6=q1D0t$}0@!30QaE;h$bvcjV=@!PC5U2FC=H&CES9tE@zPe12*0 z{9K#C1LcI1qm=3w)}MT5!-9W4+$bo@%fkjg3%F%i7?lf$4GXGT`MlEtMn`;|uX#*+ z=C!l`J~?&jtAgs6kiktsJa~KWiume}&L>pWB@P%6w^>kz_+NwQ|K|run|_m7tWk}& z;lp+McS#%KV?*dV@sTZ07ffHg-S+X0hql%j>tkbsyrH2LgC8Aw^Ydfxe^@bPX_uXE zyhmD;UES|^G4kzuGi$$m>i2DemKS*YWxRFI6Z^*WnDE0N%rimdCjy_`h7pq{ z&;FeK;}`rWuIZLjOuJ73z}stM9a38U|KcRLG54jdF6R)qLoVa&NL zBjf!&Gj0u^dxdzDycIDwh&b-`B{AW%Jj7#s7=4O+_LTGqpT@V+$T@dSq=tD&uZcDq zIQ3>nw4;IS4!D8_9={4#(RBRg@5|`OhBV!d9_@BL?!W2jw?BmD(Jd`CUFe?xS}p={ q&A@0Mz}bP`f}8=mx0f2AOM7Y03H$JK!X3h0!kxn1K_7yzR$Ky_VHdRk literal 0 HcmV?d00001 diff --git a/app/tpl/server/favicon.png b/app/tpl/server/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..71235d5346e86edf99bb4056953184fd2b8c96c3 GIT binary patch literal 1188 zcmV;V1Y7%wP)m4A(zz|1|l z6=t>_sQ#BScgpli^Rt!TmrY>Sx7|w!VILwhM!A*`3QL=w%N!Vyz|8M@9@>xF}6WSDv+d+gQ7|jjmjt4;H3LYxuLc zAn~^cm7wm+u7x=Fk-%_PKPAwab3Qq8k;|QVE?tk=`pe&R<;9}O!=EkM{jtVaje~O54`%|T~wztRHZV!Hm`;#g5zy5=7A7JgeV>o zBP3)?s-SLLS7*6hZ+zNVH9N3yY5>Hqtv!5mx|>{L$P5U`z(X2^^kChuvw3aR#C{Qw zt1PQd!_(7^>;$7H7O{(LO@=3DR8o;L<5~A`6_&)1#3dN+y<~dnxz2+P``Rs- zn&O2yfupSvJAS*)Zet(|6HCZHYAV&<^mJy-*Q??2_#&Ap`Y7_ z?lhLw2DTo#M*EEjVVD`Yym75Nq3LQ46$AY7u`Waav!Y|&Y(h8T&JR`v`-jTf2`N}s zm*VrrtF(9Kk%I|vD?rPT3%oF%yj5S##`-Gc6!uiKBA!Y6O9&{o-9y#wBU1y%+9ED? zMz~wSp#qK}54abe5drRj?pSokLT*TgyA8n9?h*nmuTMCRb8@hDb_N3PIqjonDl z9jRDZ^y+^z*G(ISo(Ck$zJKE|Qhnd;RMJE6e6hZJ>l~~%(QYMN-|r>sP|F+Di~G)r zVZc)0BbyKIlJ^1;v=h zw{!Enf-SwUq2@r@LuvNij>qKe0;csl;4uLojq_GR&$n!xba>QbdA6Zru2QxGsoz*` zN-#9Cb8$2ke9hTScZ_~4?}K8s4IQf`w)E|kh8GfiFz3c8q0OxglXezc*4X?ttKD>E zz7tji>?xr-GiIs)-z;cG{G3Yro|cBmjr_mLT>k)Vh810tHB zz)%1%OQLGrvI+oFG&hBp6bJ-1EErSmH`UmIYa^rS2a!QA$ ztC1`3o#sD2%oq5H;(IjKy^Xew4=vvjET+`3;-0C`j@5L#_BGiQ9V5%{nPjc@`hIuU zuorRr<|z&9t1QJIoI_4LR%Prkdn>#CyfchG?{!<^1R061*vy1>`}|Y(h+uuy-B?V5)8m zq>}ila|n|x<)kK&2gwnkb0^ljWle-N%waKkk)MV9iWq(dEEb4_hIOHO{owC`pGjbeEX$g*4UjOu2orXj^(5gMk6>Jy8o}^}zgM(v}7i=ql zrZuZ;6^hH%@kK~n+=Ji<@olk$Y;u9R)or?_3N5beTT=(aE{f)f;?CNhm85e_IINW- zmZvZ5xvdopgeDeKZpnC3D2D5Sm%?2otS|Q)etEdsqVr`x+AbtqEmjr>0eVVQk$k8i znz%bwnv^ch5J*J~VXlZEK!d3C1ZYJ9jmo1gW6l1Eb;OG z2RbC;P9iXStYK@8SSl0bihxWeOU%mNe^@Axh!S&hGfS!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC~-KzC&cyt|NsAf|Ne3F z_V-Iy-z{7HY4`pwhmO6SyZFO~tv??=zNTvQ>*@3F*KXXhc7Ix2eN|EK83lel zd;TCQqefvdD@uy{V50kRLU%meS@82J{@7@cFxvpXQ<@l*vHty${1n&pO zemQpXaZc$Sx4;`lc5fFgzvmzMq^Ros%5`sM%)7)VbIa28j(gD0yZ7JBT5!(s{Xd|0 z7?Zr+T^Kr8Wj%l#&H|6fVg?4jBOuH;Rhv&5D9B#o>Fdh=h+R}rhGYBp@;yMINuDl_ zArhC96BY<1q$H&sR629&*nxA6nrBWPJ$ty@)lzz6^M>lAQPZyY)a#%@E z^^~@TZnL6}w$>3X_4Nx@ELpRt>q&%ZX(1aMZ(v}cuWqhv%Z7Dw&HEY`PTV+!bG_!I ztUBY&N?+NM#b;Svb+;JkY!MONdZ=XX*4`z$V(zyMSKdk%Oe;=MGvo7MVo=HAYLc*z zTn}`eYKdz^NlIc#s#S7PDv)9@GBC8zH89sTG7K>^wKB4>GO*A#FtRc*Sg3n14@E<6 zeoAIqC2kED3eqkCHAsSN2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMhd8i!PC{x JWt~$(69BZl3$_3N literal 0 HcmV?d00001 diff --git a/app/tpl/server/index.html.twig b/app/tpl/server/index.html.twig new file mode 100644 index 0000000..b524ee6 --- /dev/null +++ b/app/tpl/server/index.html.twig @@ -0,0 +1,43 @@ + + + + + + + {% if favicon %}{% endif %} + {{ 'server.index.title'|trans }} | {{ person.name }} + + + +
    +
    +

    {{ 'server.index.header'|trans }}

    + +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/app/tpl/server/less/global.less b/app/tpl/server/less/global.less new file mode 100644 index 0000000..64a1e9f --- /dev/null +++ b/app/tpl/server/less/global.less @@ -0,0 +1,153 @@ +/** + * LESS for magdev/resume print theme + */ + +// MIXINS:START + +// +// Mixins +// + +.border-radius(@radius) { + -moz-border-radius: @radius; + -webkit-border-radius: @radius; + border-radius: @radius; +} + +// MIXINS:END + +// VARS:START + +// +// Variables +// + +@base-font-family: Arial, Verdana; +@base-font-size: 13px; +@base-font-color: #222; +@base-background-color: #fff; +@base-accent-color: #68d19b; + +@headline-1-size: (@base-font-size * 3); +@headline-1-color: #fff; +@headline-1-background-color: darken(@base-accent-color, 15%); + + +@headline-2-color: @base-font-color; +@headline-2-color-small: lighten(@headline-2-color, 30%); +@headline-2-size: floor(@base-font-size * 1.6); +@headline-2-size-small: (@headline-2-size - 5px); + +@leftcol-width: 350px; +@leftcol-nav-margin: 10px 10px 0 15px; + +@icon-pdf: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAw1BMVEX////++/v42dv30tXupqvyu7/0wsbtnaPwsLX54ePWJTL65ef31tjaO0flc3vVIS7xt7vPARD65ufgWmTQBRTPAA/zvsL//v7ldX3YLjryvMDgW2X53uDtnqTZNEDQBBPgWWPzv8PqkpjdSVTUHCnWJzTnf4fRCRfldn7hYmv31df//f34293eUlzXKDX0x8raPEfPAhHfU130xsnjbHXcRlHYMj7toqfeT1nkcnrvqa7smJ7SDhzaOUXcR1L53d/smqDOQe/+AAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB+IHFREcCLf3d7wAAACSSURBVBjTY2CgEmBkYmbBIszKxsDOgSnMycXNw4tFOR+/gKAQFsOFRUTFsCgXlxCVZMMiLiXKKygtgyEsKyrEKievoKikrKKK5Fg1dXEGBg1RUVFNLW0dhLCuHoO+gaGRsZQJrymSan4zaXlNHXSjzQVFLbQwLLQUFbXCdJ21jaQtFkfbManaYxFmc2AmNg5IAgAkagqCGD9ZrwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNy0yMVQxNToyODowOCswMjowMKEt3m4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDctMjFUMTU6Mjg6MDgrMDI6MDDQcGbSAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg=='); +@icon-html: url('data:text/html;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABHVBMVEX////Z7vt+xfFEqusonugpnuhDqut+xPHX7fv2+/55wvE4pepBqeuKyvL5/P7W7PuTzvMuoOl9xPH4/P73+/5ZtO0gmudlue4xoulJrevi8vySzfMqnuhWs+18xPFYs+2NzPPq9f37/f/g8fxetu5ouu9Gq+vY7fsim+c3pOne8Puu2vZqvO+Y0PQ2pOl3wfC33/fV7Prt9/0hmudCqeuRzfPl8/wlnOjQ6vqi1fXL5/m13ffu9/2c0vQqn+hHrOu53/et2vaz3ffm9Pwnnejd8PvK5/lxv/Da7vvS6/qHyfL0+v78/v+84PgjnOfc7/tpu+/9/v9wvvD6/f7P6fqCxvJXs+1nuu94wvG94fhtve9dtu6AxvFUse1/xfE/bvvIAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB+IHFREcCLf3d7wAAADsSURBVBjTY2CgImBkYmZhZWPnQBHk5OLm4eXj5BcQFBJGiIqIiolLSPIxMEhJy8iKwIXlxORlFBSVGBiUVVTV5GCi6hpimlpglraOrrKeOlSYSd/AEMwwUhMT0zMWggqbmJpBGAJiIMAGFTa3sLSytgEybMHCdlBhVmElezFuBwYGJUcnVYQwD7+zsZiYi6orkO0mJqYGFWaXZnAH6fYAsj3FxLygwvya3j6yYmL2ILavmJ8/3DsBgUFiEsEgZohYKNyXwmHhES6RIJZ3VHQwIlD4YjRi1ZVE1KW54/hQwpCDndnFhS2OkZqRBQA4TBqQiOWEHQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNy0yMVQxNToyODowOCswMjowMKEt3m4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDctMjFUMTU6Mjg6MDgrMDI6MDDQcGbSAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg=='); + +// VARS:END + + + +// +// Styles +// + + +// Reset +* { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + list-style-type: none; +} + +// Base elements +html, body { + background-color: @base-background-color; + font-family: @base-font-family; + font-size: @base-font-size; + color: @base-font-color; +} +html,body,.row-main,.col-main,.col-left { + height: 100% +} +body { + overflow: hidden; +} +h1 { + font-size: @headline-1-size; + color: @headline-1-color; + font-weight: bold; + background-color: @headline-1-background-color; + padding: 2px auto; + text-transform: uppercase; + letter-spacing: 3px; + text-align: center; +} +h2 { + font-size: @headline-2-size; + color: @headline-2-color; + font-weight: bold; + + small { + font-size: @headline-2-size-small; + color: @headline-2-color-small; + font-style: italic; + } +} +a { + text-decoration: none; +} + +// Grid +.row { + display: flex; +} +.col { + flex: 1; +} + +.col-golden-narrow { flex: 0 0 38%; } +.col-golden-wide { flex: 0 1 62%; } + +.col-left { + flex: 0 0 @leftcol-width; + background-color: lighten(@base-accent-color, 10%); + border-right: 5px solid @headline-1-background-color; + + nav { + margin: @leftcol-nav-margin; + + li { + margin-bottom: 10px; + background-color: @base-background-color; + padding: 5px 10px; + .border-radius(5px); + + &.html { + background: @base-background-color @icon-html no-repeat top right; + } + &.pdf { + background: @base-background-color @icon-pdf no-repeat top right; + } + + a:first-child { + color: @base-font-color; + } + + dt,dd { + display: inline-block; + } + dt { + width: 38%; + float: left; + } + dd { + width: 62%; + } + } + } +} + diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..d35e948 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,4 @@ +*.phar +lessc +pscss +.directory diff --git a/bin/dossier.php b/bin/dossier.php new file mode 100755 index 0000000..fa9d344 --- /dev/null +++ b/bin/dossier.php @@ -0,0 +1,67 @@ +add(new Command\Dossier\DossierBuildCommand()); +$app->add(new Command\Dossier\DossierInitCommand()); +$app->add(new Command\Dossier\DossierStatusCommand()); +$app->add(new Command\Intro\IntroAddCommand()); +$app->add(new Command\Intro\IntroEditCommand()); +$app->add(new Command\Person\PersonAddCommand()); +$app->add(new Command\Person\PersonEditCommand()); +$app->add(new Command\Cv\CvAddCommand()); +$app->add(new Command\Cv\CvEditCommand()); +$app->add(new Command\Config\ConfigShowCommand()); +$app->add(new Command\Config\ConfigGetCommand()); +$app->add(new Command\Config\ConfigSetCommand()); +$app->add(new Command\Config\ConfigUnsetCommand()); +$app->add(new Command\Theme\ThemeListCommand()); +$app->add(new Command\Theme\ThemeDumpCommand()); +$app->add(new Command\Cache\CacheClearCommand()); +$app->add(new Command\Server\ServerStartCommand()); +$app->add(new Command\Dev\PharExtractCommand()); +$app->run(); + + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..c5693ce --- /dev/null +++ b/composer.json @@ -0,0 +1,68 @@ +{ + "name" : "magdev/dossier", + "type" : "project", + "description" : "Create your dossier from Markdown files", + "license" : "MIT", + "authors" : [{ + "name" : "Marco Grätsch", + "email" : "magdev3.0@gmail.com" + } + ], + "autoload" : { + "psr-4" : { + "Magdev\\Dossier\\" : "src" + } + }, + "require" : { + "php" : "~7.2", + "ext-phar" : "*", + "ext-SPL" : "*", + "ext-date" : "*", + "ext-fileinfo" : "*", + "ext-mbstring" : "*", + "ext-bz2" : "*", + "symfony/console" : "^4.1", + "symfony/translation" : "^4.1", + "symfony/config" : "^4.1", + "symfony/dependency-injection" : "^4.1", + "symfony/event-dispatcher" : "^4.1", + "symfony/process" : "^4.1", + "symfony/dotenv" : "^4.1", + "twig/twig" : "^2.4", + "mnapoli/front-yaml" : "^1.6", + "oyejorge/less.php" : "v1.7.0.14", + "erusev/parsedown-extra" : "^0.7.1", + "zaininnari/html-minifier" : "*", + "leafo/scssphp" : "^0.7.6", + "adbario/php-dot-notation" : "^2.0", + "magdev/console-form" : "^0.0.7", + "monolog/monolog" : "^1.23", + "pdfshift/pdfshift-php" : "~1.0.2" + }, + "config" : { + "bin-dir" : "bin" + }, + "extra" : { + "phar-builder" : { + "compression" : "BZip2", + "name" : "dossier.phar", + "output-dir" : "./bin/", + "entry-point" : "bin/dossier.php", + "include" : [ + "app" + ], + "include-dev" : false, + "events" : { + "command.package.end" : [ + "chmod +x ./bin/dossier.phar" + ] + } + } + }, + "repositories" : [{ + "type" : "git", + "url" : "git@github.com:magdev/console-form.git", + "name" : "magdev/console-form" + } + ] +} \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..3b94770 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1638 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "312b2b3c9454aafe2833c3dfce3d2b2c", + "packages": [ + { + "name": "adbario/php-dot-notation", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/adbario/php-dot-notation.git", + "reference": "895fe4bb153ac875c61a6fba658ded45405e73a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/895fe4bb153ac875c61a6fba658ded45405e73a4", + "reference": "895fe4bb153ac875c61a6fba658ded45405e73a4", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0|^6.0", + "squizlabs/php_codesniffer": "^3.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Adbar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Riku Särkinen", + "email": "riku@adbar.io" + } + ], + "description": "PHP dot notation access to arrays", + "homepage": "https://github.com/adbario/php-dot-notation", + "keywords": [ + "ArrayAccess", + "dotnotation" + ], + "time": "2018-07-22T12:33:53+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2018-03-08T01:11:30+00:00" + }, + { + "name": "erusev/parsedown-extra", + "version": "0.7.1", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown-extra.git", + "reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/0db5cce7354e4b76f155d092ab5eb3981c21258c", + "reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c", + "shasum": "" + }, + "require": { + "erusev/parsedown": "~1.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "ParsedownExtra": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "An extension of Parsedown that adds support for Markdown Extra.", + "homepage": "https://github.com/erusev/parsedown-extra", + "keywords": [ + "markdown", + "markdown extra", + "parsedown", + "parser" + ], + "time": "2015-11-01T10:19:22+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "leafo/scssphp", + "version": "v0.7.7", + "source": { + "type": "git", + "url": "https://github.com/leafo/scssphp.git", + "reference": "1d656f8c02a3a69404bba6b28ec4e06edddf0f49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/leafo/scssphp/zipball/1d656f8c02a3a69404bba6b28ec4e06edddf0f49", + "reference": "1d656f8c02a3a69404bba6b28ec4e06edddf0f49", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.6", + "squizlabs/php_codesniffer": "~2.5" + }, + "bin": [ + "bin/pscss" + ], + "type": "library", + "autoload": { + "psr-4": { + "Leafo\\ScssPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leaf Corcoran", + "email": "leafot@gmail.com", + "homepage": "http://leafo.net" + } + ], + "description": "scssphp is a compiler for SCSS written in PHP.", + "homepage": "http://leafo.github.io/scssphp/", + "keywords": [ + "css", + "less", + "sass", + "scss", + "stylesheet" + ], + "time": "2018-07-22T01:22:08+00:00" + }, + { + "name": "magdev/console-form", + "version": "0.0.7", + "source": { + "type": "git", + "url": "magdev@localhost:/home/magdev/local/git/console-form/", + "reference": "91ed4ed9296e0024441043be059846a86c72a1b9" + }, + "require": { + "php": ">=5.4", + "symfony/console": "^2.8 || ^3.0 || ^4.0", + "symfony/finder": "^2.8 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.5", + "squizlabs/php_codesniffer": "^2.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Droath\\ConsoleForm\\": "./src" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Travis Tomka", + "email": "underoathosx@gmail.com" + } + ], + "description": "Symfony console form helper.", + "keywords": [ + "console", + "form" + ], + "time": "2018-07-03T14:31:01+00:00" + }, + { + "name": "mnapoli/front-yaml", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/mnapoli/FrontYAML.git", + "reference": "24070ace8b741247bb3161cbb38ecc541268b296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mnapoli/FrontYAML/zipball/24070ace8b741247bb3161cbb38ecc541268b296", + "reference": "24070ace8b741247bb3161cbb38ecc541268b296", + "shasum": "" + }, + "require": { + "erusev/parsedown": "~1.0", + "php": ">=5.4.0", + "symfony/yaml": "~2.1|^3.0|^4.0" + }, + "require-dev": { + "league/commonmark": "~0.7", + "phpunit/phpunit": "~4.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mni\\FrontYAML\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "time": "2017-10-29T19:29:55+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "oyejorge/less.php", + "version": "v1.7.0.14", + "source": { + "type": "git", + "url": "https://github.com/oyejorge/less.php.git", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.24" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + }, + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "homepage": "http://lessphp.gpeasy.com", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "time": "2017-03-28T22:19:25+00:00" + }, + { + "name": "pdfshift/pdfshift-php", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/pdfshift/pdfshift-php.git", + "reference": "f0da7c7b8bfab1f27404a34f715dee305c6cf837" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdfshift/pdfshift-php/zipball/f0da7c7b8bfab1f27404a34f715dee305c6cf837", + "reference": "f0da7c7b8bfab1f27404a34f715dee305c6cf837", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.3.2", + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PDFShift\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cyril Nicodeme", + "email": "contact@pdfshift.io", + "homepage": "https://pdfshift.io", + "role": "Developer" + } + ], + "description": "Convert HTML documents to PDF using the PDFShift.io API.", + "homepage": "https://github.com/pdfshift/pdfshift-php", + "keywords": [ + "api", + "convert", + "document", + "html", + "pdf", + "pdfshift" + ], + "time": "2018-06-12T13:14:23+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/config", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "c868972ac26e4e19860ce11b300bb74145246ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/c868972ac26e4e19860ce11b300bb74145246ff9", + "reference": "c868972ac26e4e19860ce11b300bb74145246ff9", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/console", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/ca80b8ced97cf07390078b29773dc384c39eee1f", + "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "f4f401fc2766eb8d766fc6043d9e6489b37a41e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f4f401fc2766eb8d766fc6043d9e6489b37a41e4", + "reference": "f4f401fc2766eb8d766fc6043d9e6489b37a41e4", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "conflict": { + "symfony/config": "<4.1.1", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "~4.1", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2018-08-01T08:24:03+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "22ca63c46e252b8a8f37b8f9e6da66bff5b3d3e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/22ca63c46e252b8a8f37b8f9e6da66bff5b3d3e7", + "reference": "22ca63c46e252b8a8f37b8f9e6da66bff5b3d3e7", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "symfony/process": "~3.4|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", + "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T09:10:45+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "2e30335e0aafeaa86645555959572fe7cea22b43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2e30335e0aafeaa86645555959572fe7cea22b43", + "reference": "2e30335e0aafeaa86645555959572fe7cea22b43", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e162f1df3102d0b7472805a5a9d5db9fcf0a8068", + "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/process", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f01fc7a4493572f7f506c49dcb50ad01fb3a2f56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f01fc7a4493572f7f506c49dcb50ad01fb3a2f56", + "reference": "f01fc7a4493572f7f506c49dcb50ad01fb3a2f56", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65", + "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "46bc69aa91fc4ab78a96ce67873a6b0c148fd48c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/46bc69aa91fc4ab78a96ce67873a6b0c148fd48c", + "reference": "46bc69aa91fc4ab78a96ce67873a6b0c148fd48c", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-07-26T11:24:31+00:00" + }, + { + "name": "twig/twig", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "6a5f676b77a90823c2d4eaf76137b771adf31323" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/6a5f676b77a90823c2d4eaf76137b771adf31323", + "reference": "6a5f676b77a90823c2d4eaf76137b771adf31323", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2018-07-13T07:18:09+00:00" + }, + { + "name": "zaininnari/html-minifier", + "version": "0.4.2", + "source": { + "type": "git", + "url": "https://github.com/zaininnari/html-minifier.git", + "reference": "5b94d85705626f9bb33b7c667bc4400088ed4ece" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zaininnari/html-minifier/zipball/5b94d85705626f9bb33b7c667bc4400088ed4ece", + "reference": "5b94d85705626f9bb33b7c667bc4400088ed4ece", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "autoload": { + "psr-0": { + "zz": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "The BSD 3-Clause License" + ], + "authors": [ + { + "name": "Google inc", + "homepage": "http://www.chromium.org/blink", + "role": "Author" + }, + { + "name": "zaininnari", + "homepage": "https://github.com/zaininnari/", + "role": "Developer" + } + ], + "description": "The Blink HTMLTokenizer ported to PHP.", + "homepage": "https://github.com/zaininnari/html-minifier", + "keywords": [ + "Blink", + "HTML minify", + "php" + ], + "time": "2015-08-18T14:10:55+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~7.2", + "ext-phar": "*", + "ext-spl": "*", + "ext-date": "*", + "ext-fileinfo": "*", + "ext-mbstring": "*", + "ext-bz2": "*" + }, + "platform-dev": [] +} diff --git a/src/Analyzer/Base/AnalyzableInterface.php b/src/Analyzer/Base/AnalyzableInterface.php new file mode 100644 index 0000000..1d38f02 --- /dev/null +++ b/src/Analyzer/Base/AnalyzableInterface.php @@ -0,0 +1,47 @@ +getAnalyzerData(); + $base = sizeof($data); + $counter = 0; + + foreach ($data as $key => $value) { + if ($value) { + $counter++; + } + } + + return ceil(($counter * 100) / $base); + } +} + diff --git a/src/Application.php b/src/Application.php new file mode 100644 index 0000000..684ba6c --- /dev/null +++ b/src/Application.php @@ -0,0 +1,132 @@ +container = new ContainerBuilder(); + $loader = new YamlFileLoader($this->container, new FileLocator(DOSSIER_ROOT.'/app/conf')); + $loader->load('services.yaml'); + + $formDiscovery = new FormDiscovery($this->container); + $forms = $formDiscovery->discover(DOSSIER_ROOT.'/src/Form', '\Magdev\Dossier\Form'); + + $helperSet = $this->getHelperSet(); + $helperSet->set(new FormHelper($forms)); + $helperSet->set(new ExportHelper()); + $helperSet->set(new OutputHelper($this->getName(), $this->getVersion())); + $helperSet->set(new SectionManagerHelper($this->container->get('config'))); + + $this->container->get('analyzer') + ->addAnalyzer(new ModelStatusAnalyzer()); + } + + + /** + * Get the service-contianer + * + * @return \Symfony\Component\DependencyInjection\ContainerBuilder + */ + public function getContainer(): ContainerBuilder + { + return $this->container; + } + + + /** + * Get a service by its name + * + * @param string $name + * @param int $invalidBehavior + * @return object|\Symfony\Component\DependencyInjection\Container|mixed|void|unknown + */ + public function getService(string $name, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) + { + return $this->getContainer()->get($name, $invalidBehavior); + } + + + /** + * {@inheritDoc} + * @see \Symfony\Component\Console\Application::getLongVersion() + */ + public function getLongVersion() + { + $code = ''.base64_decode(DOSSIER_LOGO).PHP_EOL; + $header = $this->getService('translator')->trans('app.header'); + + if ('UNKNOWN' !== $this->getName()) { + if ('UNKNOWN' !== $this->getVersion()) { + $code .= ' '.$this->getName().' '.$this->getVersion().PHP_EOL; + } else { + $code .= ' '.$this->getName().PHP_EOL; + } + } + $code .= ' '.$header.''; + + return $code; + } +} diff --git a/src/Command/Base/BaseCommand.php b/src/Command/Base/BaseCommand.php new file mode 100644 index 0000000..708cabe --- /dev/null +++ b/src/Command/Base/BaseCommand.php @@ -0,0 +1,174 @@ +getService('output_helper') + ->setOutput($output) + ->writeApplicationHeader(); + return $this; + } + + + /** + * Get a service from the container + * + * @param string $name + * @return mixed + */ + protected function getService(string $name) + { + return $this->getApplication()->getService($name); + } + + + /** + * {@inheritDoc} + * @see \Symfony\Component\Console\Command\Command::configure() + */ + protected function configure() + { + $this->addOption('no-header', 'N', InputOption::VALUE_NONE, 'Suppress header