diff --git a/.env b/.env
new file mode 100644
--- /dev/null
+++ b/.env
@@ -0,0 +1,7 @@
+
+###> symfony/framework-bundle ###
+APP_ENV=dev
+APP_SECRET=87b885b76ea9992c5ef17c9eea8a8c65
+#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
+#TRUSTED_HOSTS='^localhost|example\.com$'
+###< symfony/framework-bundle ###
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,29 @@
*.pyc
+*.lock
+vendor
+bin
+var
+logs
+public/stable5
+public/trunk5
+src/Data/
+config/services.php
+
+###> symfony/webpack-encore-bundle ###
+/node_modules/
+/public/build/
+npm-debug.log
+yarn-error.log
+###< symfony/webpack-encore-bundle ###
+###> symfony/framework-bundle ###
+/.env.local
+/.env.local.php
+/.env.*.local
+/public/bundles/
+/var/
+/vendor/
+###< symfony/framework-bundle ###
+
+###> symfony/web-server-bundle ###
+/.web-server-pid
+###< symfony/web-server-bundle ###
diff --git a/404.php b/404.php
deleted file mode 100644
--- a/404.php
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/css/app.scss b/assets/css/app.scss
new file mode 100644
--- /dev/null
+++ b/assets/css/app.scss
@@ -0,0 +1 @@
+@import './base';
diff --git a/assets/css/base.scss b/assets/css/base.scss
new file mode 100644
--- /dev/null
+++ b/assets/css/base.scss
@@ -0,0 +1,601 @@
+@import "~bootstrap/scss/bootstrap";
+@import '~jquery-ui/themes/base/all.css';
+
+body {
+ font-family:'Noto Sans', sans-serif
+}
+p {
+ line-height:2em
+}
+h1,h2,h3 {
+ line-height:1.5em
+}
+ul>li {
+ line-height:2em
+}
+.header {
+ position:sticky;
+ top:0;
+ display:block;
+ z-index:2;
+ background-color:rgba(255,255,255,0.95)
+}
+.header>* {
+ margin:auto;
+ max-width:1140px
+}
+.header::after {
+ content:"";
+ clear:both;
+ display:block;
+ background-size:100% 5px;
+ position:absolute;
+ height:5px;
+ width:100%;
+ left:0;
+ bottom:0;
+ background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAFCAYAAACzSkmrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACkSURBVDiN7dExDsIwDEbh9we1soXE6eCEbJyInQNwgKgxQ9WWFrIShr7ZkewvYm/V5fbwLj8NoKTec0lGzp66ZAzJS8jQ4EKG5KLY+FIeYBAOMoRHyFC4YJwpcqVixGYWnHHG1ebs700YHxBAHWM6DqoYHxBvswvGEegbnL1q/pAqxgQB1DE2EEAdY4aABeMEHH57+n+m8/UerZfYW0qtF9hb9wI2bU03vw4M8QAAAABJRU5ErkJggg==");
+ z-index:-1
+}
+#kHeaderNav {
+ padding:0;
+ position:relative
+}
+#kHeaderNav button {
+ outline:0
+}
+#kHeaderNav .navbar-toggler {
+ position:relative
+}
+#kHeaderNav .navbar-toggler:before {
+ position:absolute;
+ top:0;
+ left:50%;
+ width:42px;
+ margin-left:-21px;
+ content:"=";
+ color:#4d4d4d;
+ font-family:"glyph";
+ font-size:22px;
+ font-weight:normal;
+ text-indent:0px;
+ text-align:center;
+ line-height:50px;
+ display:inline-block;
+ text-decoration:none !important
+}
+#kHeaderNav a.nav-link,#kHeaderNav a.dropdown-item {
+ color:#334545;
+ height:50px;
+ line-height:50px;
+ padding:0 20px
+}
+#kHeaderNav a:hover {
+ color:#3daefd
+}
+#kHeaderNav a.nav-link.active {
+ color:#FFF
+}
+#kHeaderNav a.nav-link.active:hover {
+ color:#FFF
+}
+#kHeaderNav .dropdown-menu {
+ padding:0
+}
+#kHeaderNav a.active:hover,#kHeaderNav .dropdown-menu.show a.nav-link {
+ color:#334545
+}
+#kHeaderNav a:active,#kHeaderNav .active,#kHeaderNav a.dropdown-item:active,#kHeaderNav .navbar-brand-active,#kHeaderNav .dropdown-toggle.show a.nav-link {
+ background:#54a3d8;
+ color:#FFF
+}
+#kHeaderNav .dropdown-toggle.show {
+ position:relative
+}
+#kHeaderNav .dropdown-toggle::after {
+ content:"" !important;
+ display:none
+}
+#kHeaderNav .dropdown-toggle .nav-link::after {
+ display:inline-block;
+ width:0;
+ height:0;
+ margin-left:.5em;
+ vertical-align:.255em;
+ content:"";
+ border-top:.3em solid;
+ border-right:.3em solid transparent;
+ border-bottom:0;
+ border-left:.3em solid transparent
+}
+#kHeaderNav .dropdown-menu {
+ border-radius:0px;
+ border:1px solid #54a3d8;
+ border-top:none;
+ margin:0;
+ padding:0;
+ background-color:initial
+}
+@media (min-width: 575px) {
+ #kHeaderNav .dropdown-menu {
+ background-color:#fff
+ }
+}
+#kHeaderNav .dropdown-menu a {
+ display:block;
+ text-align:center;
+ text-decoration:none;
+ background-size:100%;
+ background-position:center;
+ background-repeat:no-repeat;
+ transition:background-size 0.4s;
+ position:relative
+}
+#kHeaderNav .dropdown-menu a::before {
+ content:'';
+ width:100%;
+ height:100%;
+ top:0;
+ left:0;
+ position:absolute;
+ background-repeat:no-repeat;
+ background-position:center;
+ background-size:101%;
+ z-index:-1;
+ transition:background-size 0.3s
+}
+#kHeaderNav .navbar-toggler {
+ order:2
+}
+#KontactGlobalLogo {
+ margin:0;
+ margin-top:-3px;
+ text-align:center;
+ line-height:50px;
+ height:50px;
+ padding:0 10px;
+ order:1
+}
+#KontactGlobalLogo>img {
+ width:70%;
+ margin-top:-3px
+}
+#kMainNavbar {
+ order:4
+}
+@media (min-width: 768px) {
+ #kMainNavbar {
+ order:3
+ }
+}
+#KMadeByKDE {
+ order:3;
+ padding-right:15px
+}
+#KMadeByKDE span {
+ display:none
+}
+@media (min-width: 768px) {
+ #KMadeByKDE span {
+ display:inline
+ }
+}
+@media (min-width: 768px) {
+ #KMadeByKDE {
+ order:4
+ }
+}
+main.main, .contentBody {
+ margin:auto;
+ margin-bottom:50px;
+ width:100%;
+ max-width:1140px;
+ padding:0 30px
+}
+@media (min-width: 1140px) {
+ main.main, .contentBody {
+ padding-left:0;
+ padding-right:0
+ }
+}
+main .block, .contentBody .block {
+ padding:30px 20px
+}
+main.navfix, .contentBody.navfix {
+ margin-top:50px
+}
+#kWelcome {
+ font-size:18px;
+ border-radius:2px;
+ border:solid 1px #abdaf9;
+ background-color:#e1f2ff;
+ color:#375a7d;
+ padding:10px 20px;
+ margin-top:60px;
+ margin-bottom:60px;
+ text-align:center
+}
+#kWelcome p {
+ padding:0;
+ margin:0
+}
+#kFooter {
+ background-color:#eff1f1;
+ color:#7f8c8d;
+ position:relative;
+ padding-top:12px;
+ font-size:12px;
+ width:100%;
+ clear:both
+}
+#kFooter a {
+ text-decoration:none;
+ color:#2980b9
+}
+#kFooter section {
+ width:100%;
+ max-width:1140px;
+ margin:auto;
+ padding:0 20px
+}
+#kFooter #KSiteDonateForm {
+ background-color:#abf9c7;
+ border:solid 1px #7ceca4;
+ border-radius:2px;
+ margin-top:10px;
+ padding-top:10px;
+ padding-bottom:10px
+}
+#kFooter #KSiteDonateForm h3 {
+ font-size:14px;
+ font-weight:bold;
+ color:#377d50;
+ padding:0 0 10px;
+ margin:0
+}
+#kFooter #KSiteDonateForm h3 a {
+ font-width:normal;
+ margin-left:20px;
+ color:#2980b9
+}
+#kFooter #KSiteDonateForm h3 a::before {
+ content:"( ";
+ color:#377d50
+}
+#kFooter #KSiteDonateForm h3 a::after {
+ content:" )";
+ color:#377d50
+}
+#kFooter #KSiteDonateForm #otherWaysDonate {
+ display:inline-block;
+ font-size:14px;
+ margin-top:10px
+}
+#kFooter #KGlobalContributorLinks {
+ padding:0 20px;
+ box-sizing:border-box;
+ max-width:100%;
+ background-color:rgba(0,0,0,0.05);
+ position:relative;
+ margin:auto
+}
+#kFooter #KGlobalContributorLinks nav {
+ max-width:1100px;
+ padding:0;
+ line-height:50px;
+ margin:auto;
+ font-size:14px;
+ width:100%;
+ position:relative
+}
+#kFooter #KGlobalLegalInfo {
+ padding:20px
+}
+#kFooter #KGlobalLegalInfo small {
+ font-size:12px
+}
+#kFooter #KGlobalLegalInfo figure {
+ display:inline-block;
+ padding:0;
+ margin:0
+}
+#kFooter #KGlobalLegalInfo small+small::before {
+ content:" | ";
+ color:#bdc3c7;
+ margin:0 10px
+}
+#kLinks {
+ padding:30px 20px 30px 0
+}
+#kLinks nav {
+ width:20%;
+ display:inline-block;
+ box-sizing:border-box;
+ vertical-align:top;
+ font-size:12px;
+ padding:10px 0 10px 20px
+}
+#kLinks nav h3 {
+ font-size:14px;
+ color:#95a5a6;
+ margin:0 0 10px 0;
+ font-weight:bold
+}
+#kLinks a {
+ display:block;
+ line-height:150%
+}
+#kLinks a::after {
+ color:#7f8c8d;
+ position:relative;
+ content:">";
+ font-family:"glyph";
+ vertical-align:baseline;
+ top:.1em;
+ padding-left:10px
+}
+.konqi {
+ float:right;
+ width:250px;
+ margin-top:-50px;
+ margin-left:40px
+}
+.icon {
+ margin-left:20px
+}
+.icon::before {
+ content:"";
+ position:absolute;
+ display:block;
+ width:32px;
+ height:50px;
+ left:5px;
+ background-repeat:no-repeat;
+ background-size:24px;
+ background-position:center
+}
+.preview {
+ cursor:pointer
+}
+#kImagePreview {
+ text-align:center
+}
+#kImagePreview img {
+ margin:auto;
+ cursor:pointer;
+ max-width:100%
+}
+#kImagePreviewContainer {
+ width:100%;
+ height:100%;
+ display:flex;
+ flex-direction:column;
+ align-items:center;
+ pointer-events:none
+}
+.kSocialLinks {
+ line-height:50px
+}
+.kSocialLinks a:not(.no-glyph) {
+ display:inline-block;
+ color:#fafafa;
+ background:#27AE60;
+ position:relative;
+ text-indent:-9999px;
+ width:24px;
+ line-height:30px;
+ padding:0px 10px;
+ border-radius:3px;
+ transition:all .2s
+}
+.kSocialLinks a:after {
+ content:"@";
+ font-family:'glyph';
+ font-size:24px;
+ text-indent:0px;
+ color:#fafafa;
+ position:absolute;
+ top:0px;
+ left:0px;
+ right:0px;
+ text-align:center
+}
+.kSocialLinks a.shareFacebook {
+ background-color:#2980b9
+}
+.kSocialLinks a.shareGoogle {
+ background-color:#d35400
+}
+.kSocialLinks a.shareTwitter {
+ background-color:#3daefd
+}
+.kSocialLinks a.shareForum {
+ background-color:#0068c6
+}
+.kSocialLinks a.shareTelegram {
+ background-color:#2ca5e0
+}
+.kSocialLinks a.shareFacebook:hover {
+ background-color:#3498db
+}
+.kSocialLinks a.shareGoogle:hover {
+ background-color:#f67400
+}
+.kSocialLinks a.shareTwitter:hover {
+ background-color:#70c3fe
+}
+.kSocialLinks a.shareForum:hover {
+ background-color:#1078d6
+}
+.kSocialLinks a.shareTelegram:hover {
+ background-color:#2ca5e0
+}
+.kSocialLinks a.shareFacebook:after {
+ content:"F"
+}
+.kSocialLinks a.shareGoogle:after {
+ content:"G"
+}
+.kSocialLinks a.shareTwitter:after {
+ content:"T"
+}
+.kSocialLinks a.shareForum:after {
+ content:"K"
+}
+.kSocialLinks a.shareMastodon:after {
+ content:"M"
+}
+
+a#KDEGlobalLogo.navbar-brand {
+ padding-left: 5px;
+ padding-right: 5px;
+ img {
+ padding-left: 5px;
+ paddinf-right: 5px;
+ }
+ &:hover {
+ color: white;
+ }
+}
+
+@include media-breakpoint-up(md) {
+ #languages-dropdown {
+ width: 350px;
+ }
+}
+
+@include media-breakpoint-down(lg) {
+ .nav-item.form-inline {
+ margin-bottom: 5px;
+ padding-left: 20px;
+ }
+}
+@font-face {
+ font-family:'glyph';
+ src:url("glyph/glyph.eot?d1eayo");
+ src:url("glyph/glyph.eot?d1eayo#iefix") format("embedded-opentype"),url("glyph/glyph.ttf?d1eayo") format("truetype"),url("glyph/glyph.woff?d1eayo") format("woff"),url("glyph/glyph.svg?d1eayo#glyph") format("svg");
+ font-weight:normal;
+ font-style:normal
+}
+[class^="glyph-"],[class*=" glyph-"] {
+ font-family:'glyph';
+ speak:none;
+ font-style:normal;
+ font-weight:normal;
+ font-variant:normal;
+ text-transform:none;
+ line-height:1;
+ -webkit-font-smoothing:antialiased;
+ -moz-osx-font-smoothing:grayscale
+}
+.glyph-favorite:before {
+ content:"\e900"
+}
+.glyph-link:before {
+ content:"\6c"
+}
+.glyph-share-diaspora:before {
+ content:"\2a"
+}
+.glyph-share-facebook:before {
+ content:"\46"
+}
+.glyph-share-gplus:before {
+ content:"\47"
+}
+.glyph-share-reddit:before {
+ content:"\52"
+}
+.glyph-share-twitter:before {
+ content:"\54"
+}
+.glyph-share-ycombinator:before {
+ content:"\59"
+}
+.glyph-view-catalog:before {
+ content:"\e908"
+}
+.glyph-view-categories:before {
+ content:"\e909"
+}
+.glyph-view-fullscreen:before {
+ content:"\e90a"
+}
+.glyph-view-list-details:before {
+ content:"\e90b"
+}
+.glyph-view-list-icons:before {
+ content:"\e90c"
+}
+.glyph-view-list-text:before {
+ content:"\e90d"
+}
+.glyph-view-list-tree:before {
+ content:"\e90e"
+}
+.glyph-view-media-playlist:before {
+ content:"\e90f"
+}
+.glyph-window-new:before {
+ content:"\57"
+}
+.glyph-video:before {
+ content:"\56"
+}
+.glyph-cancel:before {
+ content:"\5c"
+}
+.glyph-check:before {
+ content:"\63"
+}
+.glyph-close:before {
+ content:"\58"
+}
+.glyph-logo-kde:before {
+ content:"\4b"
+}
+.glyph-logo-plasma:before {
+ content:"\50"
+}
+.glyph-logo-plasmamobile:before {
+ content:"\4d"
+}
+.glyph-clear:before {
+ content:"\78"
+}
+.glyph-go-down:before {
+ content:"\76"
+}
+.glyph-go-home:before {
+ content:"\48"
+}
+.glyph-go-next:before {
+ content:"\3e"
+}
+.glyph-go-previous:before {
+ content:"\3c"
+}
+.glyph-go-up:before {
+ content:"\5e"
+}
+.glyph-hamburger:before {
+ content:"\3d"
+}
+.glyph-info:before {
+ content:"\49"
+}
+.glyph-new-window:before {
+ content:"\77"
+}
+.glyph-search:before {
+ content:"\51"
+}
+.glyph-settings:before {
+ content:"\53"
+}
+.glyph-share:before {
+ content:"\73"
+}
+.glyph-share-telegram:before {
+ content:"\2197"
+}
\ No newline at end of file
diff --git a/assets/css/doc.scss b/assets/css/doc.scss
new file mode 100644
--- /dev/null
+++ b/assets/css/doc.scss
@@ -0,0 +1,451 @@
+@import "base";
+
+/* Actual documentation styling */
+div.table table {
+ text-align: left; /* Disable justification */
+ border: 1px solid black;
+ border-collapse: collapse;
+}
+
+/* Give alternating row colors */
+div.table tr:nth-child(odd) {
+ background-color: #eee;
+}
+
+div.table tr:nth-child(even) {
+ background-color: white;
+}
+
+div.table th {
+ background-color: white;
+ font-weight: normal;
+ text-align: center;
+ vertical-align: middle;
+ border-bottom: 1px solid black;
+}
+
+div.table td {
+ text-align: left;
+ padding: 4px;
+}
+
+
+// alert from bootstrap 4
+
+$theme-colors: (note: #27ae60, tip: #3daee9, important: #f67400, warning: #da4453);
+
+@each $color, $value in $theme-colors {
+ div.#{$color} {
+ position: relative;
+ padding: $alert-padding-y $alert-padding-x;
+ margin-bottom: $alert-margin-bottom;
+ border: $alert-border-width solid transparent;
+ @include border-radius($alert-border-radius);
+ @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
+ // Headings for larger alerts
+ .title {
+ // Specified to prevent conflicts of changing $headings-color
+ color: inherit;
+ }
+ a {
+ font-weight: $alert-link-font-weight;
+ }
+ }
+}
+
+/* Make the content wrapping div have a nice margin. */
+body div.chapter, body div.sect1, body div.book, body div.article {
+ margin-left: 2em;
+ margin-right: 2em;
+}
+
+div.sect2 {
+ width: 100%;
+}
+
+.programlisting {
+
+ /* This will work someday */
+ border-radius: 7px;
+
+ /* To support border radius on our OSS browser friends when
+ * viewing online */
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+}
+
+.programlisting {
+ border: 1px solid black;
+ background: white;
+}
+
+
+.guimenu, .guimenuitem, .guisubmenu,
+.guilabel, .interface, .guibutton {
+ background-color: rgb(220, 220, 220);
+ color: black;
+ border: 1px solid rgb(190, 190, 190);
+ border-radius: 3px;
+}
+
+.shortcut {
+ background-color: #DDF;
+ border: 1px dotted #BBF;
+ font-weight: normal;
+ border-radius: 2px;
+}
+
+.keycap, .keysym {
+ background-color: #DFDFFF;
+ font-weight: bold;
+ border-radius: 2px;
+}
+
+.informalexample {
+ margin: 0;
+ border: 0;
+ border-left: 1px dotted black;
+ padding: 0 0 0 4px;
+}
+
+div.tip {
+ margin-bottom: 12pt;
+}
+
+div.titlepage {
+ margin-left: 0;
+}
+
+h3.title {
+ margin-left: 0;
+}
+
+.screenshot, .informalfigure {
+ border: 1px solid gray;
+ background-color: rgb(240, 240, 240);
+}
+
+/* We no longer render
s around s, but this hides them in case
+ * old generated HTML is displayed with the new style.
+ */
+.mediaobject hr, .mediaobjectco hr {
+ display: none;
+}
+
+/* Used for the text and footer area at the bottom. */
+#footer {
+ width: 100%;
+}
+
+/*
+ KDE-wide default CSS for HTML documentation (all media types).
+ Copyright (C) 2000 Frederik Fouvry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Send comments, suggestions, etc. to Frederik Fouvry
+ . */
+
+/*
+ Important note: these setting may be overridden by localised CSS. Do not
+ add here any localization-sensitive style declarations.
+
+ Any updates should be validated, e.g. http://jigsaw.w3.org/css-validator/ */
+
+/* Note: "should be inherit" means that in a proper browser inherit should work.
+ Somehow Netscape manages to interpret "inherit" as bright green.
+ Yuck. */
+
+.legalnotice, .copyright {
+ padding: 0;
+ margin: 0;
+}
+
+.abstract {
+ font-weight: bolder;
+ padding-right: 1em;
+}
+
+.toc, .list-of-tables {
+ padding-left: 1em;
+}
+
+.sect1, .chapter, .synopsis, .appendix, .preface, .article, .refsect1, .index, .glossary, .glossdiv, .gloss-article, .section {
+ padding-left: 1em;
+}
+
+.gloss-article, .glossdiv {
+ padding-right: 1em;
+}
+
+.toc .chapter {
+ padding: 0 0 0 1em;
+}
+
+.author {
+ color: rgb(82, 80, 82);
+ font-weight: bolder;
+ padding: 0;
+ margin: 0;
+}
+
+.othercredit {
+ line-height: 1em;
+}
+
+.chapter .sect1, .chapter .titlepage, .sect1 .titlepage, .article .titlepage {
+ padding: 0em;
+}
+
+.titlepage {
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+/* Links in Navigation */
+
+.navLeft a:link, .navCenter a:link, .navRight a:link, .header a:link, .header a:visited, .bottom-nav a:link, .bottom-nav a:visited {
+ color: #41597A;
+ font-weight: bold;
+}
+
+
+/* Nice link colors for the main text */
+
+:link {
+ color: #41597A;
+}
+
+:visited {
+ color: #597ba8;
+}
+
+.navLeft {
+ position: absolute;
+ left: 20px;
+}
+
+.navRight {
+ position: absolute;
+ right: 20px;
+}
+
+.navCenter {
+ text-align: center;
+ align: center;
+}
+
+.bannerBottomLeft {
+ position: absolute;
+ left: 0px;
+}
+
+.bannerBottomRight {
+ position: absolute;
+ right: 0px;
+}
+
+/* A little bit of padding makes the tables for keybindings etc much easier to read */
+
+table {
+ padding: 5px;
+}
+
+dl {
+ margin-top: 0em;
+ margin-bottom: 0.5em;
+ margin-left: 0.5em;
+}
+
+dd {
+ margin-left: 1.5em;
+}
+
+dt {
+ margin-top: 1em;
+}
+
+div.toc dt {
+ margin-top: 0px;
+}
+
+div.screenshot {
+ margin-bottom: 1em;
+ margin-top: 1em;
+}
+
+div.informalexample {
+ border-style: dotted;
+ padding: 10px;
+}
+
+/* But no padding for navigation elements */
+
+.toplogo, .navbackground {
+ padding: 0px;
+}
+
+table.programlisting
+table.screen {
+ border-style: none;
+ background-color: rgb(224, 224, 224);
+ table-layout: auto; /* 100%? */
+ color: rgb(0, 0, 0); /* should be inherit */
+}
+
+/* Same as previous block, but more general (previous is HTML only)
+ Not all browsers understand this yet.
+ TABLE[class~=programlisting]
+ TABLE[class~=screen] { border-style: none;
+ background-color: rgb(224,224,224);
+ table-layout: auto;
+ color: inherit;
+}
+*/
+
+p {
+ text-align: justify;
+}
+
+/* More specific settings */
+/* Temporary patch: browsers break on bad HTML */
+/* P, H1, H2, H3, H4, H5, TD, TH { font-family: Helvetica, Arial, sans-serif;
+ } */
+
+p, h1, h2, h3, h4, h5, h6, td, th {
+ font-family: sans-serif;
+}
+
+/* Visual cues for GUI elements etc in the text */
+
+.guimenu, .guimenuitem, .guisubmenu {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0); /* should be inherit */
+}
+
+.guilabel, .interface, .guibutton, .guiicon {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0); /* should be inherit */
+}
+
+.shortcut {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0); /* should be inherit */
+}
+
+.shortcut .keycap {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0); /* should be inherit */
+}
+
+.question {
+ font-weight: bolder;
+}
+
+.accel {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0);
+ text-decoration: underline;
+}
+
+.option, .command {
+ background-color: rgb(255, 255, 255);
+ color: rgb(0, 96, 160);
+ font-weight: bold;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: rgb(82, 80, 82);
+ background-color: transparent;
+}
+
+.arg, .parameter, .replaceable {
+ background-color: rgb(255, 255, 255);
+ color: rgb(0, 128, 64);
+ font-style: italic;
+}
+
+.screen, .programlisting {
+ background-color: rgb(220, 220, 220);
+ color: rgb(0, 0, 0); /* should be inherit */
+ border-style: dotted;
+ border-color: rgb(0, 0, 0);
+ border-width: thin;
+ padding: 5px;
+}
+
+
+/* This one is set in inches because the admonitions are set in inches
+ and they're more difficult to change. We can live with it in here,
+ for the meantime, it gives consistent margins */
+
+.example {
+ margin-left: 0.5in;
+ margin-right: 0.5in;
+}
+
+div.mediaobject, div.mediaobjectco {
+ /* float: right; */
+ /* might make it much nicer. although someone has to
+ understand the rules ;-) You also don't want it to be
+ surrounded by text it doesn't refer to ... But that
+ may be among others a question of writing style. */
+ text-align: center;
+ /* a bit of a hack: it should
+ position _images_ */
+
+ img {
+ max-width: 100%;
+ }
+}
+
+.caption {
+ margin: 0em 2em 0em 2em;
+ text-align: center;
+}
+
+.inlinemediaobject {
+ vertical-align: baseline;
+ padding-right: 1em;
+ padding-left: 1em;
+}
+
+/* An idea that could be nice: a search engine looking for specific
+classes could display them in some conspicuous color. All that is
+needed is an on the fly generated style element/style sheet. */
+
+/* Only used in the hand-made HTML license texts */
+body.license {
+ background-color: rgb(255, 255, 255);
+ text-align: justify;
+ color: rgb(0, 0, 0);
+}
+
+pre.license {
+ background-color: rgb(255, 255, 255);
+ font-family: monospace;
+ color: rgb(0, 0, 0);
+}
+
+.pagination {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.contentBody {
+ margin-left: 5%;
+ margin-right: 5%;
+ width: 90%;
+}
diff --git a/assets/glyph/glyph.eot b/assets/glyph/glyph.eot
new file mode 100644
index 0000000000000000000000000000000000000000..733439ed3249ac3f40e4393ad07c8ec440540ab2
GIT binary patch
literal 5712
zc$}SBeQaCTbw7vXdyjnldK4dZpS~$F79%?$DNz(NN0MdNrja>{?L=`s*wA5rOvZ)+MLQS^P?o7*;gH
z{)o8WeeY4C>})9Z@Xmebo_p@S=bn4d$9<=IiN2d4V)D@5hv_!U?~AACi5BO%{IxrC
zkGB!&bb(gs9lA;vQH#*av;xWv(3a^MD7|zBlxuXIF3}ZQrzA~Kmhw;ZbSDbZE%H+S
zf&1U<^l!J62(KP|HbN+bIUK@K8^9>l7De+
z`Q}xcraF=7Lp`~^yteZ3m;Uevs6T}{)~{ZGSjlv_$8i>g#lK^v_zDsr_lYZI3BAXQ*s*p29}$a=vYI`fW~bf873g
z`={-{ZU0UCe*4GmAGJ5z&Gz@&AGW{M{>y)TUnE7JE6eZpFh*=sw5taWW9j#}a|V7l
z+6;~HPoSR&_AHUngeFR&lqqGj;?LgefA8dxQ>Tuc1i~Bd?|*6kdVXy!zYgSmyYC(J
zt)Q>mFHQF1h0RUl-aX!EHt_+E00(i0ip0{gD06kY
zp3TaV%h_xL=tefX-Lz4>*{maT17ogZOci6<5@)`H>5R=y-jLsBlNhUW=8Y5W!|=sI
zaccT`PNY-n5EryG|Iz7Zp2G$E9}4w8~q&NF#IrGo;jn
z*;|;LE>4YQ(uqQZ)2T5GR+#J+r7WjK0>nfC6QqmH{L!QN{4oz-JEHCD9U31WiuCJA
z)D^?dODMsv{iX
zC`+xIy(2u#LQ~BVHYW?EVaB)jd7hj;#B*E{y_1J{dMd|SK9$LjWjcB;6(g)Y#}k?T
zJi*4?>?`w&uO4}s>&$)3gI?7;#dr!H)i(r^hqGE#3wk&WV#puWvg~1t*-)7ydMG#a
z^uc7m67XfwyrH%OYd6j6nz4R$4on`-sS(*X<&k|2?OD6;pilMKb4+g28As
z7&LC%41e!XE#n)qK;=t8!{M+!@;rR@eZGrxB;bqpSY7w|gm=<1|1`6>I3po<_;3#J
z$KnI=0pE3KGmA-^2>6+#lSVn3g*|^0J5r=0@X!@{lfEKPD^31XQ
zJ`u3ORw^7~miEP-a5x1*z|8eoC%j9wNFosdY;S5|#pv@Zsu|^M)KnFJpP_`cU+Uqo
z9*9H&by>(tP4)W+Omo2RS7QNPAGNGeUDtc~n{RSZ*Fz~Q+80oQO7X;rB0hn>sFex@
z^&p=PiD)7cHO*)w@t&&a{ShUi$=Us31+Gj{b75VMzY7&zRf9oQ)%{VwKN0~1_W1oM
z4N!)jk*NwxWlcaQ6Hv;;)U@}1+2f3i3NlD=$V#OwE1j;|Ux1Vha6pEL3XAO)Z#WHB
zs!bhC*gSxiWwm9%kujr8FF>9z(qUAveQ-G4n~(jo_g^A;bHY9ja)YpEHj;b)SHU-2GD`Ayv%4YK0n!Tkz63yWbR#zs%((88G4=k=RGCu_;kBF^wC
zFbydmyvk@yfr?6rQjY(8`-W6VZHZT<(OZw2^>TMC(Pb=wA1bC}qli?a+!eCQtp{8d
za2W9WmJGPtb-`3`wMka3Z1*_QuTh*eF2y**;tZcRw!dz;<%Wyaox0TdE%dvEetzT|
zn68x8GU-gaH-;#x_a7~zK^NWMYI*c^Qs`!`EZA#tBW)RZ1>$c=xqTu5}Vsj&lgv`iNzhHY}#WXzW7OVQy;
z7d1O!vTa?DWFshd(VBDvwU+Z;T3X^+*EI;S<0T|2L`2W(5mB$ZNKR&08vLUZ(_=IQ
zd-*(FrZ3V5_TIR`s}s4pBbK%k-F5=pPKVSm6=vFSbq!B?`3Uq#kP1
z{q6hn&chG4QP3@>4#~;XDT#6J;shD?Y%qHn1Lc84kiLKaKF_yl{_x2B{K(DEo}*brYS(8;S2Ze7q$QR{{_Yl{
zfEx>LDw^HaojqwgjOALjg*cI|RBn{ghs!hw5SW4RvH?|+;a+S&hAuQe~=c={Jc1yHGwk(8XsONH)EtY)jJapGz
z`;kvYV8^B-lXUy(eVIZ`D{u)3X}bPstJ!2BHM3opB`-dDbgaHr-hNQ#tSqHJ*n5ZT
zK{V;dJ~<=G#T31AXnDCvxPaB9%MiU<#R9e(4XNPIvmMmK>`yz@M
z$Q#hFWjW`fB5;0ORYSksvWFqNoMD90-SXS}y>s)Dbh!w5M4g3HEz6SEuB=>()zMPD
z_6Ykc1j{2(1*e=Z)O9~J;92@$EzYT%r=z%SEbPsk?L)U?G}`~8<&u*NCL#xgXtl~8
z?x`;Q-JU8WcWP17RuI&5tdmSyk^mi+?L-zJuxP1H=f4DC?#|aPpN-D^mV(YdwSQh+
zy1n~#y{XiA=a(D$*#CN5f`^{?cQW4nca9yN8NeMt8PM=JfAGp(@Hs%$#peOJuC{Lc
z7U0##+A1ziE?j<$=QDvEKWM_DX6PllNnfRJ(XTj!#OEiTq~{IKZSU`U?|A>y7xLwO
zFZz~z_k2I}Jy4!jzOVd)^6zSodQ@Ffo0?zCYp-i{?Z?_D{@3lrj$@=yM>S785&F>8
z7t8-QF7AP)yyW6u(DN?t1AflM72B2^Tt)4Wi|er3Yw{14F93>;76qdkUg3
literal 0
Hc$@
+
+
\ No newline at end of file
diff --git a/assets/glyph/glyph.ttf b/assets/glyph/glyph.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..6bca8bcc5fd89221bb20b652d8d06df54bb0b53e
GIT binary patch
literal 5556
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.2)
+if (is_array($env = @include dirname(__DIR__).'/.env.local.php')) {
+ $_SERVER += $env;
+ $_ENV += $env;
+} elseif (!class_exists(Dotenv::class)) {
+ throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.');
+} else {
+ $path = dirname(__DIR__).'/.env';
+ $dotenv = new Dotenv();
+
+ // load all the .env files
+ if (method_exists($dotenv, 'loadEnv')) {
+ $dotenv->loadEnv($path);
+ } else {
+ // fallback code in case your Dotenv component is not 4.2 or higher (when loadEnv() was added)
+
+ if (file_exists($path) || !file_exists($p = "$path.dist")) {
+ $dotenv->load($path);
+ } else {
+ $dotenv->load($p);
+ }
+
+ if (null === $env = $_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) {
+ $dotenv->populate(array('APP_ENV' => $env = 'dev'));
+ }
+
+ if ('test' !== $env && file_exists($p = "$path.local")) {
+ $dotenv->load($p);
+ $env = $_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? $env;
+ }
+
+ if (file_exists($p = "$path.$env")) {
+ $dotenv->load($p);
+ }
+
+ if (file_exists($p = "$path.$env.local")) {
+ $dotenv->load($p);
+ }
+ }
+}
+
+$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev';
+$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV'];
+$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0';
diff --git a/config/bundles.php b/config/bundles.php
new file mode 100644
--- /dev/null
+++ b/config/bundles.php
@@ -0,0 +1,13 @@
+ ['all' => true],
+ Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
+ Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
+ Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
+ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
+ Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
+ Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
+ Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true],
+ Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
+];
diff --git a/config/packages/assets.yaml b/config/packages/assets.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/assets.yaml
@@ -0,0 +1,3 @@
+framework:
+ assets:
+ json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/cache.yaml
@@ -0,0 +1,19 @@
+framework:
+ cache:
+ # Put the unique name of your app here: the prefix seed
+ # is used to compute stable namespaces for cache keys.
+ #prefix_seed: your_vendor_name/app_name
+
+ # The app cache caches to the filesystem by default.
+ # Other options include:
+
+ # Redis
+ #app: cache.adapter.redis
+ #default_redis_provider: redis://localhost
+
+ # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
+ #app: cache.adapter.apcu
+
+ # Namespaced pools use the above "app" backend by default
+ #pools:
+ #my.dedicated.cache: ~
diff --git a/config/packages/dev/debug.yaml b/config/packages/dev/debug.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/dev/debug.yaml
@@ -0,0 +1,4 @@
+debug:
+ # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
+ # See the "server:dump" command to start a new server.
+ dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"
diff --git a/config/packages/dev/easy_log_handler.yaml b/config/packages/dev/easy_log_handler.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/dev/easy_log_handler.yaml
@@ -0,0 +1,16 @@
+services:
+ EasyCorp\EasyLog\EasyLogHandler:
+ public: false
+ arguments: ['%kernel.logs_dir%/%kernel.environment%.log']
+
+#// FIXME: How to add this configuration automatically without messing up with the monolog configuration?
+#monolog:
+# handlers:
+# buffered:
+# type: buffer
+# handler: easylog
+# channels: ['!event']
+# level: debug
+# easylog:
+# type: service
+# id: EasyCorp\EasyLog\EasyLogHandler
diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/dev/monolog.yaml
@@ -0,0 +1,19 @@
+monolog:
+ handlers:
+ main:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
+ channels: ["!event"]
+ # uncomment to get logging in your browser
+ # you may have to allow bigger header sizes in your Web server configuration
+ #firephp:
+ # type: firephp
+ # level: info
+ #chromephp:
+ # type: chromephp
+ # level: info
+ console:
+ type: console
+ process_psr_3_messages: false
+ channels: ["!event", "!doctrine", "!console"]
diff --git a/config/packages/dev/routing.yaml b/config/packages/dev/routing.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/dev/routing.yaml
@@ -0,0 +1,3 @@
+framework:
+ router:
+ strict_requirements: true
diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/dev/web_profiler.yaml
@@ -0,0 +1,6 @@
+web_profiler:
+ toolbar: true
+ intercept_redirects: false
+
+framework:
+ profiler: { only_exceptions: false }
diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/framework.yaml
@@ -0,0 +1,19 @@
+framework:
+ secret: '%env(APP_SECRET)%'
+ #default_locale: en
+ #csrf_protection: true
+ #http_method_override: true
+
+ # Enables session support. Note that the session will ONLY be started if you read or write from it.
+ # Remove or comment this section to explicitly disable session support.
+ session:
+ handler_id: ~
+ cookie_secure: auto
+ cookie_samesite: lax
+
+ #esi: true
+ #fragments: true
+ php_errors:
+ log: true
+ assets:
+ json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
diff --git a/config/packages/prod/monolog.yaml b/config/packages/prod/monolog.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/prod/monolog.yaml
@@ -0,0 +1,25 @@
+monolog:
+ handlers:
+ main:
+ type: fingers_crossed
+ action_level: error
+ handler: nested
+ excluded_404s:
+ # regex: exclude all 404 errors from the logs
+ - ^/
+ nested:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
+ console:
+ type: console
+ process_psr_3_messages: false
+ channels: ["!event", "!doctrine"]
+ deprecation:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log"
+ deprecation_filter:
+ type: filter
+ handler: deprecation
+ max_level: info
+ channels: ["php"]
diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/routing.yaml
@@ -0,0 +1,4 @@
+framework:
+ router:
+ strict_requirements: ~
+ utf8: true
diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/sensio_framework_extra.yaml
@@ -0,0 +1,3 @@
+sensio_framework_extra:
+ router:
+ annotations: false
diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/test/framework.yaml
@@ -0,0 +1,4 @@
+framework:
+ test: true
+ session:
+ storage_id: session.storage.mock_file
diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/test/monolog.yaml
@@ -0,0 +1,7 @@
+monolog:
+ handlers:
+ main:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
+ channels: ["!event"]
diff --git a/config/packages/test/routing.yaml b/config/packages/test/routing.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/test/routing.yaml
@@ -0,0 +1,3 @@
+framework:
+ router:
+ strict_requirements: true
diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/test/web_profiler.yaml
@@ -0,0 +1,6 @@
+web_profiler:
+ toolbar: false
+ intercept_redirects: false
+
+framework:
+ profiler: { collect: false }
diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/translation.yaml
@@ -0,0 +1,6 @@
+framework:
+ default_locale: en
+ translator:
+ default_path: '%kernel.project_dir%/translations'
+ fallbacks:
+ - '%locale%'
diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/twig.yaml
@@ -0,0 +1,4 @@
+twig:
+ default_path: '%kernel.project_dir%/templates'
+ debug: '%kernel.debug%'
+ strict_variables: '%kernel.debug%'
diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml
new file mode 100644
--- /dev/null
+++ b/config/packages/webpack_encore.yaml
@@ -0,0 +1,4 @@
+webpack_encore:
+ # The path where Encore is building the assets.
+ # This should match Encore.setOutputPath() in webpack.config.js.
+ output_path: '%kernel.project_dir%/public/build'
diff --git a/config/routes.yaml b/config/routes.yaml
new file mode 100644
--- /dev/null
+++ b/config/routes.yaml
@@ -0,0 +1,3 @@
+#index:
+# path: /
+# controller: App\Controller\DefaultController::index
diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml
new file mode 100644
--- /dev/null
+++ b/config/routes/annotations.yaml
@@ -0,0 +1,3 @@
+controllers:
+ resource: ../../src/Controller/
+ type: annotation
diff --git a/config/routes/dev/twig.yaml b/config/routes/dev/twig.yaml
new file mode 100644
--- /dev/null
+++ b/config/routes/dev/twig.yaml
@@ -0,0 +1,3 @@
+_errors:
+ resource: '@TwigBundle/Resources/config/routing/errors.xml'
+ prefix: /_error
diff --git a/config/routes/dev/web_profiler.yaml b/config/routes/dev/web_profiler.yaml
new file mode 100644
--- /dev/null
+++ b/config/routes/dev/web_profiler.yaml
@@ -0,0 +1,7 @@
+web_profiler_wdt:
+ resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
+ prefix: /_wdt
+
+web_profiler_profiler:
+ resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
+ prefix: /_profiler
diff --git a/config/services.yaml b/config/services.yaml
new file mode 100644
--- /dev/null
+++ b/config/services.yaml
@@ -0,0 +1,32 @@
+# This file is the entry point to configure your own services.
+# Files in the packages/ subdirectory configure your dependencies.
+
+# Put parameters here that don't need to change on each machine where the app is deployed
+# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
+
+imports:
+ - { resource: 'services.php' }
+
+parameters:
+ locale: 'en'
+
+services:
+ # default configuration for services in *this* file
+ _defaults:
+ autowire: true # Automatically injects dependencies in your services.
+ autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
+
+ # makes classes in src/ available to be used as services
+ # this creates a service per class whose id is the fully-qualified class name
+ App\:
+ resource: '../src/*'
+ exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
+
+ # controllers are imported separately to make sure services can be injected
+ # as action arguments even if you don't extend any base controller class
+ App\Controller\:
+ resource: '../src/Controller'
+ tags: ['controller.service_arguments']
+
+ # add more service definitions when explicit configuration is needed
+ # please note that last definitions always *replace* previous ones
diff --git a/create_generated_used.php b/create_generated_used.php
--- a/create_generated_used.php
+++ b/create_generated_used.php
@@ -37,19 +37,36 @@
# full length, without the prefix (with code), without the suffix (.json)
$var_name_len = strlen($json_file) - (strlen(JSONFILE_PREFIX) + 3) - 5;
$var_name = substr($json_file, strlen(JSONFILE_PREFIX)+3, $var_name_len);
- echo "\$$var_name = $array_string;\n";
+ echo "const $var_name = $array_string;\n";
+
+ if ($var_name == 'languagelist') {
+ // create special variable for routing parameter _locale in config/services.php
+ $string = '';
+ foreach ($json_array as $lang) {
+ $string .= $lang . '|';
+ }
+ $string = rtrim($string,"|");
+
+ // save content
+ $parameterFile = fopen("./config/services.php", "w");
+ fwrite($parameterFile, "setParameter('app.locales', '$string');\n");
+ fclose($parameterFile);
+ }
}
function convert_files($json_dir)
{
$all_files = scandir($json_dir);
echo "\n";
+ echo "}\n";
}
$json_files_dir = ".";
diff --git a/dblatex-cvs-install/bin/dblatex b/dblatex-cvs-install/bin/dblatex
deleted file mode 100755
--- a/dblatex-cvs-install/bin/dblatex
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-#
-# This script is automatically created by
-# ./configure --prefix=/home/phil/sources/dblatex-cvs-install --catalog=/home/phil/cvs-kde/share/apps/ksgmltools2/customization/catalog
-#
-#SGML_CATALOG_FILES is exported by generator
-
-DBLATEX_BASE_DIR=${DBLATEX_BASE_DIR:-/home/docs/docs}
-
-TEXINPUTS=:${DBLATEX_BASE_DIR}/dblatex-cvs-install/share/dblatex/latex//:$TEXINPUTS
-export TEXINPUTS
-
-${DBLATEX_BASE_DIR}/dblatex-cvs-install/share/dblatex/scripts/dblatex $*
diff --git a/docgen_conf.ini b/docgen_conf.ini
--- a/docgen_conf.ini
+++ b/docgen_conf.ini
@@ -1,16 +1,16 @@
[common]
-work_dir=/home/docs/docs/work
-website_dir=/home/docs/website
+work_dir=/home/carl/docs/work
+website_dir=/home/carl/project/docs-kde-org/public
# If the following options are not specified, languages and packages
# are read from the files with the same name
-#languages=
-#packages=
-branches=stable4,trunk4,stable5,trunk5
-static_files=404.php,docs.css,favicon.ico,images,include,index.php,intro.inc.html,robots.txt,styles
+languages=en,ca,fr,uk
+packages=calligra,frameworks,kde-workspace
+branches=stable5,trunk5
+static_files=
excluded_lang_pdf=es,ja
[env.kdelibs4]
-compile_dir=/home/docs/docs/kdelibs
+compile_dir=/home/carl/project/docs-kde-org/kdelibs
docbookxml_path=/usr/share/xml/docbook/schema/dtd/4.2/
docbookxsl_path=/usr/share/xml/docbook/stylesheet/docbook-xsl
diff --git a/doclogconfig.ini b/doclogconfig.ini
--- a/doclogconfig.ini
+++ b/doclogconfig.ini
@@ -21,7 +21,7 @@
class=FileHandler
level=DEBUG
formatter=formatter
-args=('/home/docs/logs/%(logfilename)s.log',)
+args=('/home/carl/project/docs-kde-org/logs/%(logfilename)s.log',)
[formatter_formatter]
format=%(asctime)s:%(levelname)s:%(name)s:%(message)s
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index 2c9dd50e4d961b11292cae22cc765d531f4d0d93..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@9M;W3ewrL>+bfYFHZNF`#kfUd;jO0d*=ME
zM6yOa8#YM9+g1|)oJ8`nL?UqzQ<#M1U;DF0o`=;tMV`_-s=cpJ8EB6>_zlz{PE-Xu
z@pGsHrQ!BmjBuhl%$XaJE;Pru(;V%}Zy{Unm3m8Ea$K#NemP)^a*qvi&lji+dX<|o
z&U74eqxZNceJMUXO!lJVb2sXR{gPP!!TUwjL3R{-S-0hTtmQ(`CQAHYqWZ8McN1Lr
z>*PL+dEpGU-ejOj!)jp^Mp*>~O+4F1YYbb=i;JtNJMr@|)BU{?e9JTD9
zottH5M9*lAil?;|%ns==7!8c;I?<)?=W47Iwb5Hp_)0k^^uNcvPED*mU8y@6zIK^u
zy^j7b_t29TPJgN&gBbzzD|6`l>L8up#-Tal#*KJKlpokoxO+WyN9@tWZ$&FlVQzec
zUS$?tU+iRQ!NkhS3Z03rXjA<$%}ipLdMdOoG$c4t=4V5Z*Yo0k3oTzqW1OF7acPmZ
zBu}&{9xN{{u)4ZR%V#^7>}g|J__}*Gk=7(I`emVd5P}qLp=UIj3HT|(7%mBoIiipIvP{l=#zcOKz;&
zFJbb_%OImY%%%bd7c
zj9!(FwjheyWFHZGH=4-pl=w&+&HRcy8qNG(GV>c`=GRg1>xfG5s|dFf{5lGLw^9Ee
Ve(S=Wo6Y>5Uh~YW;eUr&`wy;ov*`c;
diff --git a/include/doc_footer.inc b/include/doc_footer.inc
deleted file mode 100644
--- a/include/doc_footer.inc
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
- |
-
-
-
-$name
\n";
-else
- $contact = i18n_var("Maintained by kde.org Webmaster
\n");
-?>
-
-
-
-
-
-
-
-
-
-