Move public files to /public subdirectory

phpcs-errors:221 phpunit-status:successful phpstan-errors:0
This commit is contained in:
2020-10-31 00:00:26 +01:00
committed by Stefan Rohde-Enslin
parent 00f1c4f423
commit d56601b0cc
19 changed files with 62 additions and 30 deletions

View File

@ -0,0 +1,144 @@
@import 'editMenu.css';
/* ==============
| Load fonts
|================ */
@font-face {
font-family: sourceSansPro;
src: local('Source-Sans-Pro'), local('Source Sans Pro'),
url(../fonts/SourceSansPro-Regular.woff2) format('woff2'),
url(../fonts/SourceSansPro-Regular.ttf) format('truetype');
}
/* ==============
| General
|================ */
* { box-sizing: border-box; z-index: 1; }
body { margin: 2em; background: #FFF;
font-family: sourceSansPro, Arial, Helvetica, Times; font-size: 1.2em; line-height: 1.5em; }
a { text-decoration: none; color: inherit; }
h1 { display: block; max-width: 600px; margin: 0 auto 1.5em auto; }
h1 > * { display: inline-block; vertical-align: middle; color: #212121; }
h1 img { height: 2em; margin-right: .2em; border-radius: .1em; opacity: .7; transition: opacity .4s; }
h1 img:hover { opacity: 1; }
body > div,
body > form { display: block; max-width: 90vw; margin: 0 auto 3em auto; padding-bottom: 3em; }
form > div { margin-bottom: 1em; }
label { display: block; font-weight: bold; margin-bottom: .5em; }
.invisible { display: none !important; opacity: 0; }
.buttonLike,
select,
button,
textarea,
input { display: block; width: 100%; padding: .5em .5em; border: 2.5px solid #EEE;
background: inherit; color: #424242; font-family: roboto; font-size: 1em;
border-radius: .2em; transition: border .2s; }
.buttonLike { display: inline-block; text-align: center; }
input[type="submit"],
button { padding: .5em .8em; }
.buttonLike,
input[type="submit"],
button { background: #FFCCBC; color: #424242; border: none; font-weight: bold; text-transform: uppercase; transition: background .2s, color .2s; }
textarea { line-height: 1.2em; }
select:hover,
textarea:hover,
input:hover { border-color: #888; }
.buttonLike:focus,
input[type="submit"]:focus,
button:focus,
.buttonLike:hover,
input[type="submit"]:hover,
button:hover { background: #CB9B8C; color: #000; }
aside .buttonLike + .buttonLike,
aside button + button { margin-top: .5em; }
aside > h4:first-child { margin-top: 0; }
select:focus,
textarea:focus,
input:focus { border-color: #CB9B8C; box-shadow: none; }
textarea:invalid,
input:invalid { box-shadow: none; }
textarea:invalid:focus,
input:invalid:focus { border-right-width: 1em; }
textarea { min-height: 30vh; }
table { width: 100%; max-height: 60vh; margin: 2em 0; border-collapse: collapse; overflow: auto; }
th { padding: .3em .5em; text-align: left; border-bottom: 2px solid #424242; }
tbody > tr:nth-child(2n + 1) { background: #F2F2F2; }
td { padding: .3em .5em; border-bottom: 1px solid #D6D6D6; }
body > div.uploader { background: #F2F2F2; border: 2px solid #EEE; padding: 1em 1em; }
ul.fieldList { display: block; margin: .5em 0; padding: 0 0; list-style: none; }
ul.fieldList > li { display: inline-block; padding: .3em; margin: .1em; border: 1px solid #D6D6D6; background: #FAFAFA; cursor: pointer; transition: background .4s, border .4s, box-shadow .4s;; }
ul.fieldList > li:hover { background: #FFF; border-color: #212121; }
ul.fieldList > li.requiredField:before { display: inline-block; content: " \002612 "; margin-right: .5em; }
ul.fieldList > li.humanTLToggled { border-color: #CB9B8C; background: #CB9B8C; box-shadow: 0 8px 6px -6px black; }
.options > a.buttonLike { display: inline-block; width: auto;
margin: .15em 0; padding: .4em .5em;
text-transform: inherit; cursor: pointer;
background: initial; border: 2px solid #D6D6D6;
opacity: 1;
transition: background .4s, opacity .4s; }
.options > a.buttonLike:hover { background: #D6D6D6; }
.actionList { margin: 1em 0 1em 1em; padding: .5em 0; }
.actionList > li a { display: inline-block; padding: .3em; border-radius: .3em; transition: background .4s; }
.actionList > li a:hover { background: #CB9B8C; }
/* =============
| Dark mode
|============ */
@media (prefers-color-scheme: dark) {
body { background: #263238; color: #ECEFF1; }
input, select, textarea { background: inherit; color: inherit; border: 3px solid #37474F; transition: border .4s, box-shadow .4s; }
a.buttonLike:focus,
.options > a.buttonLike:focus,
button:focus,
select:focus,
textarea:focus,
input:focus,
textarea:active,
input:active,
a.buttonLike:hover,
.options > a.buttonLike:hover,
ul.fieldList > li:hover,
button:hover,
select:hover,
textarea:hover,
input:hover { background: inherit; border-color: #FFF; box-shadow: initial; border-radius: .2em; }
ul.fieldList > li,
.options > a.buttonLike,
a.buttonLike, button, input[type="submit"] { background: inherit; color: #FFF; border: 3px solid #FFC107; border-radius: .2em; transition: background .4s, color .4s, border .4s; }
ul.fieldList > li { border-color: #37474F; }
ul.fieldList > li.humanTLToggled,
.options > a.buttonLike:hover,
a.buttonLike:hover, button:hover { background: #FFC107; color: #000; border-color: #FFA000; }
a { color: #CFD8DC; }
.tiles > section h2 { background: #37474F; color: inherit; }
.tiles > section:hover h2 { background: rgba(0,0,0,.2); color: inherit; }
h1, h1 > * { color: #CFD8DC; }
body > div.uploader { background: inherit; border-color: #37474F; }
}

38
public/assets/css/csvxml.min.css vendored Normal file
View File

@ -0,0 +1,38 @@
@import 'editMenu.css';@font-face{font-family:sourceSansPro;src:local('Source-Sans-Pro'),local('Source Sans Pro'),url(../fonts/SourceSansPro-Regular.woff2)format('woff2'),url(../fonts/SourceSansPro-Regular.ttf)format('truetype')}*{box-sizing:border-box;z-index:1}
body{margin:2em;background:#FFF;font-family:sourceSansPro,Arial,Helvetica,Times;font-size:1.2em;line-height:1.5em}
a{text-decoration:none;color:inherit}
h1{display:block;max-width:600px;margin:0 auto 1.5em auto}
h1>*{display:inline-block;vertical-align:middle;color:#212121}
h1 img{height:2em;margin-right:.2em;border-radius:.1em;opacity:.7;transition:opacity.4s}
h1 img:hover{opacity:1}
body>div,body>form{display:block;max-width:90vw;margin:0 auto 3em auto;padding-bottom:3em}
form>div{margin-bottom:1em}
label{display:block;font-weight:bold;margin-bottom:.5em}.invisible{display:none!important;opacity:0}.buttonLike,select,button,textarea,input{display:block;width:100%;padding:.5em.5em;border:2.5px solid #EEE;background:inherit;color:#424242;font-family:roboto;font-size:1em;border-radius:.2em;transition:border.2s}.buttonLike{display:inline-block;text-align:center}
input[type="submit"],button{padding:.5em.8em}.buttonLike,input[type="submit"],button{background:#FFCCBC;color:#424242;border:none;font-weight:bold;text-transform:uppercase;transition:background.2s,color.2s}
textarea{line-height:1.2em}
select:hover,textarea:hover,input:hover{border-color:#888}.buttonLike:focus,input[type="submit"]:focus,button:focus,.buttonLike:hover,input[type="submit"]:hover,button:hover{background:#CB9B8C;color:#000}
aside.buttonLike+.buttonLike,aside button+button{margin-top:.5em}
aside>h4:first-child{margin-top:0}
select:focus,textarea:focus,input:focus{border-color:#CB9B8C;box-shadow:none}
textarea:invalid,input:invalid{box-shadow:none}
textarea:invalid:focus,input:invalid:focus{border-right-width:1em}
textarea{min-height:30vh}
table{width:100%;max-height:60vh;margin:2em 0;border-collapse:collapse;overflow:auto}
th{padding:.3em.5em;text-align:left;border-bottom:2px solid #424242}
tbody>tr:nth-child(2n+1){background:#F2F2F2}
td{padding:.3em.5em;border-bottom:1px solid #D6D6D6}
body>div.uploader{background:#F2F2F2;border:2px solid #EEE;padding:1em 1em}
ul.fieldList{display:block;margin:.5em 0;padding:0 0;list-style:none}
ul.fieldList>li{display:inline-block;padding:.3em;margin:.1em;border:1px solid #D6D6D6;background:#FAFAFA;cursor:pointer;transition:background.4s,border.4s,box-shadow.4s}
ul.fieldList>li:hover{background:#FFF;border-color:#212121}
ul.fieldList>li.requiredField:before{display:inline-block;content:" \002612 ";margin-right:.5em}
ul.fieldList>li.humanTLToggled{border-color:#CB9B8C;background:#CB9B8C;box-shadow:0 8px 6px-6px black}.options>a.buttonLike{display:inline-block;width:auto;margin:.15em 0;padding:.4em.5em;text-transform:inherit;cursor:pointer;background:initial;border:2px solid #D6D6D6;opacity:1;transition:background.4s,opacity.4s}.options>a.buttonLike:hover{background:#D6D6D6}.actionList{margin:1em 0 1em 1em;padding:.5em 0}.actionList>li a{display:inline-block;padding:.3em;border-radius:.3em;transition:background.4s}.actionList>li a:hover{background:#CB9B8C}
@media(prefers-color-scheme:dark){body{background:#263238;color:#ECEFF1}
input,select,textarea{background:inherit;color:inherit;border:3px solid #37474F;transition:border.4s,box-shadow.4s}
a.buttonLike:focus,.options>a.buttonLike:focus,button:focus,select:focus,textarea:focus,input:focus,textarea:active,input:active,a.buttonLike:hover,.options>a.buttonLike:hover,ul.fieldList>li:hover,button:hover,select:hover,textarea:hover,input:hover{background:inherit;border-color:#FFF;box-shadow:initial;border-radius:.2em}
ul.fieldList>li,.options>a.buttonLike,a.buttonLike,button,input[type="submit"]{background:inherit;color:#FFF;border:3px solid #FFC107;border-radius:.2em;transition:background.4s,color.4s,border.4s}
ul.fieldList>li{border-color:#37474F}
ul.fieldList>li.humanTLToggled,.options>a.buttonLike:hover,a.buttonLike:hover,button:hover{background:#FFC107;color:#000;border-color:#FFA000}
a{color:#CFD8DC}.tiles>section h2{background:#37474F;color:inherit}.tiles>section:hover h2{background:rgba(0,0,0,.2);color:inherit}
h1,h1>*{color:#CFD8DC}
body>div.uploader{background:inherit;border-color:#37474F}}

View File

@ -0,0 +1,48 @@
/* ========
| New tooltip
|= ======== */
.newToolTip { position: fixed; display: none !important; min-width: 300px !important; max-width: 600px;
background: #212121 !important; color: #FFF; text-align: left; font-size: .95rem;
border-radius: .2em; box-shadow: 1px 1px 4px #646464; z-index: 3000; white-space: initial !important; }
#newToolTipMain:before { content: attr(data-title); display: block; padding: .5em 1em; max-width: 598px;
background: #212121; color: #BDBDBD; font-weight: bold;
box-shadow: 0px 4px 2px -2px #646464; }
#newToolTipMain > * { padding: .5rem 1rem !important; }
#newToolTipMain > table td { padding: .5rem 1em; vertical-align: top; }
@media screen and (min-width:75em) {
#newToolTipMain.visible { display: block !important; }
}
#newToolTipMain img { max-width: 200px; max-height: 300px; }
dl#newToolTipMain dt { padding-bottom: 0; font-weight: bold; }
dl#newToolTipMain dd { margin: -1em 0 0 0; padding: 0 0 0 0; }
.newToolTipMain p + .toolTipHierarchy { padding-bottom: 0 !important; }
#newToolTipMain > h5 { padding: 0 1rem !important; margin: -.5rem 0 !important; }
.toolTipHierarchy { margin: 0; padding: 0; border-top: 1px solid #424242; list-style: none; }
.toolTipHierarchy ul { margin: 0; padding: .2em 0 .2em 0; list-style: none; }
.toolTipHierarchy ul ul { padding: .1em 0 .1em 1.2em; }
.toolTipHierarchy ul > li:before { content: " \002514 "; display: inline-block; padding-right: .4em; }
.copyToDialogue { cursor: pointer; }
/* ========
| Animations
|= ======== */
@keyframes pulseBorderSize {
0% { border-width: 1em; }
50% { border-width: 1.2em; }
100% { border-width: 1em; }
}
@keyframes fade-in-and-vanish {
0% { opacity: 0; z-index: 1000; }
5% { opacity: .4; }
15% { opacity: 1; padding: .8em; }
75% { opacity: 1; padding: .8em; }
85% { opacity: .4; transform: translateY(0px);}
99% { opacity: 0; transform: translateY(-30px);}
100% { opacity: 0; z-index: 0; }
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,401 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1020"
height="1020"
id="svg2985"
version="1.1"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="mdlogo-code.svg"
inkscape:export-filename="mdlogo-code-512px.png"
inkscape:export-xdpi="48.189999"
inkscape:export-ydpi="48.189999">
<defs
id="defs2987" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#ffffff"
borderopacity="0.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="0"
inkscape:zoom="0.98994949"
inkscape:cx="373.81018"
inkscape:cy="657.9954"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="3680"
inkscape:window-height="1930"
inkscape:window-x="80"
inkscape:window-y="150"
inkscape:window-maximized="1"
fit-margin-top="5"
fit-margin-left="5"
fit-margin-right="5"
fit-margin-bottom="5"
showguides="false" />
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(8,-40.362183)">
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.82220364;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect845"
width="1011.1779"
height="1011.1778"
x="-3.5888982"
y="44.773335"
ry="0" />
<flowRoot
xml:space="preserve"
id="flowRoot3763"
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
transform="matrix(1.0379746,0,0,1.0379746,-169.56958,-12.773255)"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997"><flowRegion
id="flowRegion3765"
style="font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect
id="rect3767"
width="1008.1323"
height="1000.051"
x="-6.0609155"
y="50.290859"
style="font-family:sans-serif;text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara
id="flowPara3769"
style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"> </flowPara></flowRoot> <text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-stretch:normal;font-size:12.45569611px;line-height:0%;font-family:'Bookman Old Style';-inkscape-font-specification:'Bookman Old Style Semi-Light';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.03797472;stroke-opacity:1"
x="348.29947"
y="659.89093"
id="text3771"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997"><tspan
sodipodi:role="line"
id="tspan3773"
x="348.29947"
y="663.27887"
style="font-size:381.58416748px;line-height:10;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.03797472;stroke-opacity:1" /></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833"
width="79.41317"
height="79.41317"
x="98.490639"
y="742.45844"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-3"
width="79.413177"
height="79.41317"
x="98.490639"
y="626.96552"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6"
width="79.41317"
height="79.41317"
x="98.490639"
y="511.47241"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:10.21611977;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-3-7"
width="82.178253"
height="47.530357"
x="97.108063"
y="429.24481"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-5"
width="79.413162"
height="79.41317"
x="271.73004"
y="742.45844"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-3-3"
width="79.41317"
height="79.41317"
x="271.73004"
y="626.96552"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5"
width="79.413162"
height="79.41317"
x="271.73004"
y="511.47241"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-5-6"
width="79.413162"
height="79.41317"
x="444.96948"
y="742.45844"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-3-3-2"
width="79.41317"
height="79.41317"
x="444.96948"
y="626.96545"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9"
width="79.413162"
height="79.41317"
x="444.96948"
y="511.47235"
rx="0"
ry="39.706581"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.21612072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-1"
width="47.530357"
height="82.178246"
x="201.05171"
y="510.08987"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.21612072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-1-2"
width="47.530357"
height="82.178246"
x="374.29114"
y="510.08987"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7"
width="79.413162"
height="79.41317"
x="595.11035"
y="742.45844"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-0"
width="79.413162"
height="79.41317"
x="710.60327"
y="742.45844"
rx="0"
ry="0"
inkscape:transform-center-x="-9.9165682"
inkscape:transform-center-y="47.832846"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-9"
width="79.413162"
height="79.41317"
x="826.09625"
y="742.45844"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3"
width="79.413162"
height="79.41317"
x="595.11035"
y="626.96552"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6"
width="79.413162"
height="79.41317"
x="595.11035"
y="511.47241"
rx="0"
ry="39.706581"
inkscape:transform-center-x="-29.166407"
inkscape:transform-center-y="139.41528"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6-0"
width="79.413162"
height="79.41317"
x="710.60327"
y="511.47241"
rx="0"
ry="0"
inkscape:transform-center-x="-29.166375"
inkscape:transform-center-y="139.41528"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-6"
width="79.413162"
height="79.41317"
x="826.09625"
y="626.96552"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-2"
width="79.413162"
height="79.41317"
x="826.09625"
y="511.47241"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6-6"
width="79.413162"
height="79.41317"
x="826.09625"
y="395.97949"
rx="0"
ry="0"
inkscape:transform-center-x="-29.166404"
inkscape:transform-center-y="139.4153"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6-6-1"
width="79.413162"
height="79.41317"
x="826.09625"
y="280.48651"
rx="0"
ry="0"
inkscape:transform-center-x="-29.166404"
inkscape:transform-center-y="139.41528"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340618;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-3"
width="41.781116"
height="82.780952"
x="443.28558"
y="509.78845"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-75"
width="82.780945"
height="41.78112"
x="443.28558"
y="550.78833"
rx="0"
ry="0"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6-3"
width="82.780945"
height="41.78112"
x="593.42645"
y="550.78839"
rx="0"
ry="0"
inkscape:transform-center-x="-30.4033"
inkscape:transform-center-y="73.349637"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833-6-5-9-7-3-6-5"
width="41.781116"
height="82.780952"
x="634.42627"
y="509.78851"
rx="0"
ry="0"
inkscape:transform-center-x="-15.345135"
inkscape:transform-center-y="145.32765"
inkscape:export-xdpi="96.379997"
inkscape:export-ydpi="96.379997" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000mm"
height="1000mm"
viewBox="0 0 1000 1000"
version="1.1"
id="svg8"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="mdlogo-csvxml.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.04"
inkscape:cx="4890.6004"
inkscape:cy="12712.02"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="3840"
inkscape:window-height="2046"
inkscape:window-x="0"
inkscape:window-y="54"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(9.5367432e-7,703)">
<rect
style="fill:#ff8080;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-6-7"
width="475"
height="200"
x="50"
y="97" />
<rect
style="fill:#aa0000;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997"
width="475"
height="200"
x="50"
y="-703" />
<rect
style="fill:#aa4400;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-0"
width="475"
height="200"
x="525"
y="-703" />
<rect
style="fill:#d40000;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-6"
width="475"
height="200"
x="50"
y="-503" />
<rect
style="fill:#d45500;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-0-2"
width="475"
height="200"
x="525"
y="-503" />
<rect
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-0-2-6"
width="475"
height="200"
x="525"
y="-303" />
<rect
style="fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-0-2-6-1"
width="475"
height="200"
x="525"
y="-103" />
<rect
style="fill:#ffb380;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect997-0-2-6-1-8"
width="475"
height="200"
x="525"
y="97" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:22.35199928;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect815"
width="597.64825"
height="597.64825"
x="11.175858"
y="-361.82413"
rx="20"
ry="20" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.4702857, 2.4702857;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870"
width="80"
height="80"
x="134.99998"
y="-183.00003" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-5"
width="80"
height="80"
x="55"
y="-103.00003" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-3"
width="80"
height="80"
x="134.99998"
y="-23.000032" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-56"
width="80"
height="80"
x="214.99998"
y="-262.99997" />
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:16.59635544;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-3-2"
width="63.403645"
height="63.403645"
x="223.29817"
y="65.298225" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028573, 2.47028573;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-9"
width="80"
height="80"
x="-485"
y="-57.000008"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-5-1"
width="80"
height="80"
x="-565"
y="23.000032"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-3-27"
width="80"
height="80"
x="-485"
y="103.00006"
transform="scale(-1)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-56-0"
width="80"
height="80"
x="-405.00006"
y="-137.00003"
transform="scale(-1)" />
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:16.59635544;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect870-3-2-9"
width="63.403645"
height="63.403645"
x="-396.70184"
y="191.29825"
transform="scale(-1)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -0,0 +1,130 @@
(function() {
let csvBySelectionButton = document.getElementById("csvBySelection");
let unsetSelectionButton = document.getElementById("unsetSelection");
function checkCSVBySelectionAccessibility() {
let selected = document.getElementsByClassName("humanTLToggled");
if (selected.length === 0) {
csvBySelectionButton.classList.add("invisible");
unsetSelection.classList.add("invisible");
}
else {
csvBySelectionButton.classList.remove("invisible");
unsetSelection.classList.remove("invisible");
}
}
// Takes a callback function
function doForFieldList(callback) {
let fieldLists = document.getElementsByClassName("fieldList");
for (let i = 0, max = fieldLists.length; i < max; i++) {
let fields = fieldLists[i].getElementsByTagName("li");
for (let j = 0, maxj = fields.length; j < maxj; j++) {
callback(fields[j]);
}
}
}
function toggleListFieldSelectionState(field) {
let newValue = field.getAttribute("data-alt");
field.setAttribute("data-alt", field.textContent);
field.textContent = newValue;
field.classList.toggle("humanTLToggled");
if (field.classList.contains("humanTLToggled") === false) return;
let dependencies = field.getAttribute("data-dependencies");
if (dependencies !== undefined && dependencies !== null) {
let linkedFields = dependencies.split(";");
for (let i = 0, max = linkedFields.length; i < max; i++) {
let linkedField = document.getElementById(linkedFields[i]);
if (linkedField.classList.contains("humanTLToggled") === true) continue;
toggleListFieldSelectionState(linkedField);
}
}
}
doForFieldList(function(field) {
// Each field should switch its visible content and human-readable
// translation on a click.
field.addEventListener('click', function(e) {
toggleListFieldSelectionState(field);
checkCSVBySelectionAccessibility();
});
});
csvBySelectionButton.addEventListener('click', function(e) {
let selectionForm = document.createElement("form");
selectionForm.method = "POST";
selectionForm.action = "csv.php";
let hiddenInput = document.createElement("input");
hiddenInput.type = "hidden";
hiddenInput.name = "selectedFields";
hiddenInput.value = "";
let selected = document.getElementsByClassName("humanTLToggled");
for (let i = 0, max = selected.length; i < max; i++) {
hiddenInput.value += selected[i].getAttribute("data-value") + ",";
}
selectionForm.appendChild(hiddenInput);
document.documentElement.appendChild(selectionForm);
selectionForm.submit();
});
let selectRequired = document.getElementById("selectRequired");
selectRequired.addEventListener('click', function(e) {
doForFieldList(function(field) {
if (field.classList.contains("requiredField") === false) return;
if (field.classList.contains("humanTLToggled") === true) return;
toggleListFieldSelectionState(field);
checkCSVBySelectionAccessibility();
});
});
let selectAll = document.getElementById("selectAll");
selectAll.addEventListener('click', function(e) {
doForFieldList(function(field) {
if (field.classList.contains("humanTLToggled") === true) return;
toggleListFieldSelectionState(field);
checkCSVBySelectionAccessibility();
});
});
unsetSelectionButton.addEventListener('click', function(e) {
doForFieldList(function(field) {
if (field.classList.contains("humanTLToggled") === false) return;
toggleListFieldSelectionState(field);
checkCSVBySelectionAccessibility();
});
});
})();

View File

@ -0,0 +1,5 @@
(function(){let csvBySelectionButton=document.getElementById("csvBySelection");let unsetSelectionButton=document.getElementById("unsetSelection");function checkCSVBySelectionAccessibility(){let selected=document.getElementsByClassName("humanTLToggled");if(selected.length===0){csvBySelectionButton.classList.add("invisible");unsetSelection.classList.add("invisible")}else{csvBySelectionButton.classList.remove("invisible");unsetSelection.classList.remove("invisible")}}
function doForFieldList(callback){let fieldLists=document.getElementsByClassName("fieldList");for(let i=0,max=fieldLists.length;i<max;i++){let fields=fieldLists[i].getElementsByTagName("li");for(let j=0,maxj=fields.length;j<maxj;j++){callback(fields[j])}}}
function toggleListFieldSelectionState(field){let newValue=field.getAttribute("data-alt");field.setAttribute("data-alt",field.textContent);field.textContent=newValue;field.classList.toggle("humanTLToggled");if(field.classList.contains("humanTLToggled")===!1)return;let dependencies=field.getAttribute("data-dependencies");if(dependencies!==undefined&&dependencies!==null){let linkedFields=dependencies.split(";");for(let i=0,max=linkedFields.length;i<max;i++){let linkedField=document.getElementById(linkedFields[i]);if(linkedField.classList.contains("humanTLToggled")===!0)continue;toggleListFieldSelectionState(linkedField)}}}
doForFieldList(function(field){field.addEventListener('click',function(e){toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});csvBySelectionButton.addEventListener('click',function(e){let selectionForm=document.createElement("form");selectionForm.method="POST";selectionForm.action="csv.php";let hiddenInput=document.createElement("input");hiddenInput.type="hidden";hiddenInput.name="selectedFields";hiddenInput.value="";let selected=document.getElementsByClassName("humanTLToggled");for(let i=0,max=selected.length;i<max;i++){hiddenInput.value+=selected[i].getAttribute("data-value")+","}
selectionForm.appendChild(hiddenInput);document.documentElement.appendChild(selectionForm);selectionForm.submit()});let selectRequired=document.getElementById("selectRequired");selectRequired.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("requiredField")===!1)return;if(field.classList.contains("humanTLToggled")===!0)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});let selectAll=document.getElementById("selectAll");selectAll.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("humanTLToggled")===!0)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});unsetSelectionButton.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("humanTLToggled")===!1)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})})})()

View File

@ -0,0 +1,73 @@
/**
* A simple implementation of a tooltip.
*
* @author Joshua Ramon Enslin <joshua@jrenslin.de>
*/
function generateToolTips() {
/**
* Function for setting the alignment of an element.
*
* @param {Event} e Event triggering the execution of this function.
* @param {DOMElement} elem Dom element to position.
*
* @return {void}
*/
function getDirection(e, elem) {
if (window.innerHeight < e.clientY + elem.clientHeight) {
elem.style.top = "";
elem.style.bottom = (window.innerHeight - e.clientY) + "px";
}
else {
elem.style.bottom = "";
elem.style.top = (e.clientY + 2) + "px";
}
if (window.innerWidth < e.clientX + elem.clientWidth) {
elem.style.left = "";
elem.style.right = (window.innerWidth - e.clientX) + "px";
} else {
elem.style.right = "";
elem.style.left = (e.clientX + 2) + "px";
}
}
let triggers = document.getElementsByClassName("newToolTipTag");
for (let i = 0, max = triggers.length; i < max; i++) {
let trigger = triggers[i];
let dataTarget = trigger.getAttribute("data-for");
let target = document.getElementById("tooltip_" + dataTarget);
trigger.addEventListener("mouseover", function(e) {
let newMain = document.getElementById("newToolTipMain");
if (newMain !== null) return;
newMain = target.cloneNode(true);
newMain.id = "newToolTipMain";
document.getElementsByTagName("body")[0].appendChild(newMain);
newMain.classList.add("visible");
getDirection(e, newMain);
});
trigger.addEventListener("mousemove", function(e) {
let newMain = document.getElementById("newToolTipMain");
getDirection(e, newMain);
});
trigger.addEventListener("mouseout", function(e) {
let newMain = document.getElementById("newToolTipMain");
if (newMain.classList.contains("sticked")) return;
newMain.classList.remove("visible");
document.getElementsByTagName("body")[0].removeChild(newMain);
});
/*
trigger.addEventListener("click", function(e) {
document.getElementById("newToolTipMain").classList.toggle("sticked");
});
*/
}
}
generateToolTips();

76
public/csv.php Normal file
View File

@ -0,0 +1,76 @@
<?PHP
/**
* Generates a CSV template based on the field list provided for CSVXML.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
require_once __DIR__ . "/../functions/functions.php";
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// This array contains all available languages
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
// Some languages are in translation. They will only be available for logged in users.
if (isset($_GET['navlang'])) {
$_SESSION['lang'] = $_GET['navlang'];
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
}
else if (!isset($_SESSION['lang'])) {
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
}
$lang = $_SESSION['lang'];
if (!empty($_POST) and !empty($_POST['selectedFields'])) {
$selectionActive = true;
$selectedFields = explode(",", trim($_POST['selectedFields'], ","));
}
else $selectionActive = false;
require __DIR__ . "/../values/availableFields.php";
$line1 = $line2 = $line3 = $line4 = [];
foreach ($availableFields as $headline => $fields) {
$i = 0;
$tLine1 = $tLine2 = $tLine3 = $tLine4 = [];
$tLine1[] = $headline;
foreach($fields as $fieldName => $field) {
if ($selectionActive === true and !in_array($fieldName, $selectedFields)) {
continue;
}
if ($i !== 0) $tLine1[] = "";
$tLine2[] = $fieldName;
$tLine3[] = $field['name_human_readable'];
# $tLine4[] = $field['remark'];
if (!empty($field['allowedValues'])) $tLine4[] = end($field['allowedValues']);
else $tLine4[] = $field['name_human_readable'];
$i++;
}
if (empty($tLine2) or count($tLine2) === 0) continue;
for ($i = 1; $i <= 4; $i++) {
${"line$i"} = array_merge(${"line$i"}, ${"tLine$i"});
}
}
header('Content-Type: text/csv; charset=utf-8');
if ($selectionActive === true)
header("Content-Disposition: attachment; filename=csvxml_museum-digital_template-{$lang}_selection.csv");
else
header("Content-Disposition: attachment; filename=csvxml_museum-digital_template-{$lang}.csv");
for ($i = 2; $i <= 4; $i++) {
echo mb_convert_encoding('"' . implode("\";\"", ${"line$i"}) . '"' . PHP_EOL, 'utf-16', 'utf-8');;
}

108
public/index.php Normal file
View File

@ -0,0 +1,108 @@
<?PHP
/**
* New start page for CSVXML.
*
* @link https://groupit.museum-digital.de/csvxml/
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
require_once __DIR__ . "/../functions/functions.php";
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// This array contains all available languages
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
// Some languages are in translation. They will only be available for logged in users.
if (isset($_GET['navlang'])) {
$_SESSION['lang'] = $_GET['navlang'];
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
}
else if (!isset($_SESSION['lang'])) {
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
}
$lang = $_SESSION['lang'];
$tlLoader = new MDTlLoader("csxml_start", $lang);
$toInject = '
<script src="assets/js/newToolTip.js" type="text/javascript" defer></script>
';
echo printHTMLHead($toInject);
echo '
<div class="uploader">
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" id="csrf-token" name="csrf-token" aria-label="Anti-CSRF Token" value="' . htmlspecialchars(getAntiCsrfToken()) . '" />
<label for="fileToUpload">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_csv_file_for_upload') . '</label>
<input name="uploaded" type="file" accept=".csv" id="fileToUpload" required />
<button type="submit">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'upload') . '</button>
</form>
</div>
<div>
<h2>' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'currently_approved_tags') . '</h2>
<div class="options">
<a href="csv.php" class="buttonLike">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'download_csv_all') . '</a>
<a class="buttonLike invisible" id="csvBySelection">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'download_csv_by_selection') . '</a>
<br />
<a class="buttonLike" id="selectRequired">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_required_fields') . '</a>
<a class="buttonLike" id="selectAll">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_all_fields') . '</a>
<a class="buttonLike invisible" id="unsetSelection">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'unset_selection') . '</a>
</div>
';
require __DIR__ . "/../values/availableFields.php";
$tooltips = [];
foreach ($availableFields as $headline => $fields) {
echo "
<h3>{$headline}</h3>
<ul class='fieldList'>
";
foreach($fields as $fieldName => $field) {
if (!empty($field['remark']) or !empty($field['explica'])) $hasTooltip = true;
else $hasTooltip = false;
echo "
<li id='{$fieldName}' data-alt='{$field['name_human_readable']}' data-value='{$fieldName}' data-for='{$fieldName}' class='";
if ($hasTooltip === true) echo " newToolTipTag";
if (!empty($field['required']) and $field['required'] === true) echo " requiredField";
echo "'";
if (!empty($field['dependsOn'])) {
echo " data-dependencies='" . htmlspecialchars(implode(";", $field['dependsOn'])) . "'";
}
echo ">{$fieldName}";
if (!empty($field['explica'])) $toolTipExplica = "</p><h5>General</h5><p>" . $field['explica'];
else $toolTipExplica = "";
$toolTip = generateHelpTooltip($fieldName, $field['name_human_readable'], "{$field['remark']}{$toolTipExplica}");
if ($hasTooltip) $tooltips[] = $toolTip[0];
echo "</li>";
}
echo '
</ul>
';
}
echo '
</div>
';
echo implode($tooltips);
echo '
</body>
</html>
';

391
public/index3.php Normal file
View File

@ -0,0 +1,391 @@
<?PHP
declare(strict_types = 1);
require_once __DIR__ . "/../functions/functions.php";
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// This array contains all available languages
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
// Some languages are in translation. They will only be available for logged in users.
if (isset($_GET['navlang'])) {
$_SESSION['lang'] = $_GET['navlang'];
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
}
else if (!isset($_SESSION['lang'])) {
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
}
$lang = $_SESSION['lang'];
$filename = $_GET['fnam'];
$csv_datei = MD_STD::realpath(__DIR__ . '/../csv/' . $filename);
// Get allowed values * $fieldNoMultiplicator
$fieldNoMultiplicator = 10;
require __DIR__ . "/../values/availableFields.php";
$allowed = $eventpart = $eventpartsure = $fieldsWithDependency = $fieldsWithAllowedValueSet = [];
foreach ($availableFields as $categoryName => $fieldCategory) {
$allowed = array_merge($allowed, array_keys($fieldCategory));
// Extended operations for events
if (strpos($categoryName, $basis['event']) !== false) {
foreach ($fieldCategory as $key => $value) {
if (strpos($key, "_annotation") !== false or strpos($key, "_gnd") !== false) continue;
if (strpos($key, "_sure") !== false) $eventpartsure[] = $key;
else $eventpart[] = $key;
}
}
foreach ($fieldCategory as $key => $value) {
if (!empty($value["dependsOn"])) {
$fieldsWithDependency[$key] = $value['dependsOn'];
}
if (!empty($value["allowedValues"])) {
$fieldsWithAllowedValueSet[$key] = $value['allowedValues'];
}
}
}
$allowed_inclusion_kind_of = ['inclusion_kind_of', 'Schenkung', 'Kauf', 'Grabung', 'Notbergung', 'Erbschaft', 'Stiftung', 'Enteignung', 'Ursprungsbestand', 'Ajándékozás','Vétel','Feltárás','Hivatalos átadás','Csere','Gyűjtés','Saját előállítás','Törzsanyag','Letét', 'endowment', 'dispossession', 'old stock', ''];
echo printHTMLHead();
echo '<div class="maincontent">';
echo 'Please wait ... (checking validity)';
echo '<form action="index.php" style="margin:0px;padding:0px;">';
echo '<input type="submit" value="Reload" />';
echo '</form>';
///// Check #1
//echo '<pre>';print_r($allowed);echo '</pre>';
echo '1: Only allowed tags (column names) used?';
$fp = fopen ( $csv_datei, 'r' );
$y = 1;
$error = 0;
$zeile = fgetcsv( $fp, 100000, ';' );
$maxLoopLen = count($zeile);
for ($x = 0; $x < $maxLoopLen; $x++) {
$zeile[$x] = str_replace("\xEF\xBB\xBF", "", $zeile[$x]);
$inhalt[$y][$x] = $zeile[$x];
if (!in_array($inhalt[1][$x], $allowed)) {
echo '<br><i style="font-style:normal;color:#990000;">ERROR in column ' . $x . ' created by value: ' . $inhalt[1][$x] . '</i>';
$error = $error + 1;
}
//echo '<br/>';var_dump($inhalt[1][$x]);
}
fclose($fp);
$erstezeile = $zeile;
if ($error != 0) echo '<br><b style="color:#990000;">Not allowed tags found !</b>'; else echo '<br><i style="font-style:normal;color:#009900;">Only allowed tags used !</i>';
//// Check #2
echo '<br><br>2: Not allowed multiple use of tags (column names)?';
$compare = array_unique($zeile);
$result = identical_values($zeile, $compare);
if ($result == false) {
echo '<br><b style="color:#990000;">There are dublicate column names !</b>';
$error = $error + 1;
}
else {
echo '<br><i style="font-style:normal;color:#009900;">No dublicate column names !</i>';
}
//// Get values into memory for following checks
$fp = fopen($csv_datei, 'r');
$y = 0;
while ($zeile = fgetcsv($fp, 100000, ';')) {
$y++;
$maxLoopLen = count($zeile);
for ($x = 0; $x < $maxLoopLen; $x++) {
$inhalt[$y][$x] = str_replace("'", "\'", $zeile[$x]);
}
}
fclose($fp);
///// Check #3
echo '<br><br>3: Mandatory tags available and always filled in?';
unset($inv_array);
$inv_error = 0;
/**
* Function for finding duplicates?.
*
* @param array $array Input array.
*
* @return array
*/
function get_duplicates(array $array):array {
return array_unique(array_diff_assoc($array, array_unique($array)));
}
$mandatory = ['inventory_number','object_type','object_title','object_description'];
foreach ($mandatory as $tMandatoryField) {
if (!in_array($tMandatoryField, $erstezeile)) {
echo '<br><i style="font-style:normal;color:#990000;">Mandatory: Column <b>' . $tMandatoryField . '</b> missing</i>';
$error = $error + 1;
$inv_error = $inv_error + 1;
}
else {
$spaltenr = array_search($tMandatoryField, $erstezeile);
for ($j = 0; $j < $y; $j++) {
if ($inhalt[$j + 1][$spaltenr] == '') {
echo '<br><i style="font-style:normal;color:#990000;">Missing value for <b>' . $tMandatoryField . '</b> in row ' . ($j + 1) . '</i>';
$error = $error + 1;
$inv_error = $inv_error + 1;
}
if ($tMandatoryField == 'inventory_number') {
$inv_array[] = $inhalt[$j + 1][$spaltenr];
}
}
}
}
if ($inv_error == 0) echo '<br><i style="font-style:normal;color:#009900;">All mandatory tags available and with values !</i>';
///// Check #4
echo '<br><br>4: Inventory_number unique ?';
if (in_array('inventory_number', $erstezeile)) {
$doppelte_inv = get_duplicates($inv_array);
$doppelte_inv = array_values($doppelte_inv);
if (!empty($doppelte_inv)) {
foreach ($doppelte_inv as $tDublicateInvNo) {
echo '<br><i style="font-style:normal;color:#990000;">Multiple use of inventory_number <b>' . $tDublicateInvNo . '</b></i>';
$error = $error + 1;
}
}
else echo '<br><i style="font-style:normal;color:#009900;">All inventory_numbers are unique !</i>';
}
else {
echo '<br><b style="font-style:normal;color:#990000;">Aborted, column inventory_number is missing</b>';
$error = $error + 1;
}
///// Check #5
echo '<br><br>5: Dependent colums observed ?<br>';
// Check for correct handling of dependent fields
foreach ($fieldsWithDependency as $tField => $tDependentFields) {
if (array_search($tField, $erstezeile) === false) continue;
foreach ($tDependentFields as $tDependentField) {
if (array_search($tDependentField, $erstezeile) === false) {
$depencymessage[] = "Dependency issue at column $tField: Corresponding column $tDependentField is missing";
}
}
}
if (!empty($depencymessage)) {
echo '<b style="color:#990000;">Dependent columns were not observed !</b>';
foreach ($depencymessage as $tDepMsg) {
echo '<br>' . $tDepMsg;
$error = $error + 1;
}
}
else {
echo '<i style="font-style:normal;color:#009900;">Dependent columns were observed !</i>';
}
///// Check #6
echo '<br><br>6: Dependency of content observed?';
$crosscheck1 = ['object_other_title','detailed_description','detailed_description','inscription','inscription','dimensions_separate_length_value', 'dimensions_separate_width_value', 'dimensions_separate_height_value', 'dimensions_separate_diameter_value', 'dimensions_separate_wall_thickness_value', 'dimensions_separate_weight_value','closer_location','bought_for','worth_value','worth_insurance_value'];
$crosscheck2 = ['object_other_title_kind_of','detailed_description_md','detailed_description_extern','inscription_md','inscription_extern','dimensions_separate_length_unit', 'dimensions_separate_width_unit', 'dimensions_separate_height_unit', 'dimensions_separate_diameter_unit', 'dimensions_separate_wall_thickness_unit', 'dimensions_separate_weight_unit','closer_location_as','bought_for_currency','worth_unit','worth_insurance_unit'];
$depcon_error = 0;
foreach ($crosscheck1 as $l => $tCrossCheck) {
if (in_array($tCrossCheck, $erstezeile)) {
for ($j = 1; $j < ($y + 1); $j++) {
if ($inhalt[$j][array_search($crosscheck2[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tCrossCheck, $erstezeile)] == '') {
echo '<br>Tag <b>' . $crosscheck2[$l] . '</b> given but no entry for <b>' . $tCrossCheck . '</b> (row ' . $j . ')';
$depcon_error++;
}
}
}
}
foreach ($eventpart as $l => $tEventPart) {
if (in_array($tEventPart, $erstezeile)) {
for ($j = 1; $j < ($y + 1); $j++) {
if ($inhalt[$j][array_search($eventpartsure[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tEventPart, $erstezeile)] == '') {
echo '<br>Tag <b>' . $eventpartsure[$l] . '</b> given but no entry for <b>' . $tEventPart . '</b> (row ' . $j . ')';
$depcon_error++;
}
}
}
}
if (in_array('dimensions_separate_show_md', $erstezeile)) {
for ($j = 1; $j < ($y + 1); $j++) {
if ($inhalt[$j][array_search('dimensions_separate_show_md', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') {
echo '<br>Tag <b>dimensions_separate_show_md</b> given but no separate values available (row ' . $j . ')';
$depcon_error = $depcon_error + 1;
}
}
}
if (in_array('dimensions_separate_show_extern', $erstezeile)) {
for ($j = 1; $j < ($y + 1); $j++) {
if ($inhalt[$j][array_search('dimensions_separate_show_extern', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') {
echo '<br>Tag <b>dimensions_separate_show_extern</b> given but no separate values available (row ' . $j . ')';
$depcon_error = $depcon_error + 1;
}
}
}
/*
for ($im=1;$im<11;$im++)
{
if (in_array('image_name'.$im,$erstezeile))
{
for ($j=1;$j<($y+1);$j++)
{
if ($inhalt[$j][array_search('image_rights'.$im,$erstezeile)]!=='')
{
echo '<br>TAG <b>image_name'.$im.'</b> given but no value available for image_rights'.$im.' (row '.$j.')';
$depcon_error=$depcon_error+1;
}
if ($inhalt[$j][array_search('image_visible'.$im,$erstezeile)]!=='')
{
echo '<br>TAG <b>image_name'.$im.'</b> given but no value available for image_visible'.$im.' (row '.$j.')';
$depcon_error=$depcon_error+1;
}
}
}
}
*/
if ($depcon_error == 0) echo '<br><i style="font-style:normal;color:#009900;">Dependency of content was observed !</i>';
///// Check #7
echo '<br><br>7: Not allowed values in controlled lists?<br>';
for ($i = 2; $i <= $y; $i++) {
foreach ($inhalt[$i] as $key => $value) {
$columnName = $inhalt[1][$key];
// If the field is not restricted, then continue
if (!isset($fieldsWithAllowedValueSet[$columnName])) continue;
// For others: check if the value is from the list of allowed values.
if (!in_array($value, $fieldsWithAllowedValueSet[$columnName])) {
// It may be that the value is empty together with all dependent fields,
// because it's in a repeat field that was needed earlier.
if (empty($value) && !empty($fieldsWithDependency[$columnName])) {
$allDependentsEmpty = true;
foreach ($fieldsWithDependency[$columnName] as $depField) {
// Find keys of dependent field
$depFieldKey = array_search($depField, $inhalt[1]);
if (!empty($inhalt[$i][$depFieldKey])) {
$allDependentsEmpty = false;
break;
}
}
if ($allDependentsEmpty === true) continue;
}
$errormessage[] = "Disallowed value in column <code>{$columnName}</code> on row <code>{$i}</code>: <em>" . $value . "</em> (allowed values: <small>" . implode(", ", $fieldsWithAllowedValueSet[$columnName]) . "</small>)";
}
}
}
if (isset($errormessage) and $errormessage != '') {
echo '<b style="color:#990000;">Columns with controlled values contain invalid values !</b>';
foreach ($errormessage as $tMsg) {
echo '<br>' . $tMsg;
$error++;
}
}
else {
echo '<i style="font-style:normal;color:#009900;">Values in controlled fields are all valid !</i>';
}
///// Check #8
unset($errormessage);
echo '<br><br>8: Main image or main resource given?<br>';
$hasanyimage = 0;
for ($im = 1; $im < 29; $im++)
{
if (array_search('image_name' . $im, $erstezeile) != '') {$imagemain[$im]['name'] = array_search('image_name' . $im, $erstezeile);$hasanyimage++;
}
if (array_search('image_visible' . $im, $erstezeile) != '') $imagemain[$im]['visible'] = array_search('image_visible' . $im, $erstezeile);
if (array_search('image_main' . $im, $erstezeile) != '') $imagemain[$im]['main'] = array_search('image_main' . $im, $erstezeile);
}
if ($hasanyimage > 0) {
$imagemain = array_values($imagemain);
for ($i = 1; $i <= $y; $i++)
{
if ($i > 1) {
//check if in a row any image_name is given
$maimg = $hatimg = 0;
foreach ($imagemain as $im => $tMainImage) {
if ($inhalt[$i][$tMainImage] != '') $hatimg++;
}
if ($hatimg > 0) {
// first check: how many main-images?
foreach ($imagemain as $im => $tMainImage) {
if ($inhalt[$i][$imagemain[$im]['main']] == 'y') {
$maimg++;
$merk = $im;
}
}
// if there is exacly one main-image, is it visible?
if ($maimg == 1) {
if ($inhalt[$i][$imagemain[$merk]['visible']] == 'n') {
$errormessage[] = '<b style="font-weight:normal;color:#990000">Main image in row ' . $i . ' is not visible</b>';
}
}
}
if ($maimg == 0 and $hatimg > 0) $errormessage[] = '<b style="font-weight:normal;color:#990000">There is no visible main image given in row ' . $i . '</b>';
if ($maimg > 1 and $hatimg > 0) $errormessage[] = '<b style="font-weight:normal;color:#990000">There are ' . $maimg . ' main images given in row ' . $i . '</b>';
}
}
if (!empty($errormessage)) {
echo '<b style="color:#990000;">There is not one main image for each object !</b>';
foreach ($errormessage as $tMsg) {
echo '<br>' . $tMsg;
$error++;
}
}
else {
echo '<i style="font-style:normal;color:#009900;">For each object that has images attached exactly one main image is given !</i>';
}
}
else {
echo '<i style="font-style:normal;color:#009900;">No images to be imported !</i>';
}
echo '<hr>';
if ($error + $depcon_error > 0) {
echo '
<p>Error(s) found: ' . ($error + $depcon_error) . '</p>';
}
else {
echo '<a href="index6.php?fnam=' . htmlspecialchars($_GET['fnam']) . '" class="buttonLike">Create XML for md:import (utf8)</a><br>';
}
echo '</div>';
echo '
</body>
</html>
';

86
public/index6.php Normal file
View File

@ -0,0 +1,86 @@
<?PHP
declare(strict_types = 1);
require_once __DIR__ . "/../functions/functions.php";
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// This array contains all available languages
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
// Some languages are in translation. They will only be available for logged in users.
if (isset($_GET['navlang'])) {
$_SESSION['lang'] = $_GET['navlang'];
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
}
else if (!isset($_SESSION['lang'])) {
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
}
$lang = $_SESSION['lang'];
if (empty($filename = trim($_GET['fnam'], " ,./"))) {
echo "Error: Invalid file name";
exit;
}
$csv_datei = MD_STD::realpath(__DIR__ . '/../csv/' . $filename);
if (is_dir(__DIR__ . "/../xml")) rrmdir(__DIR__ . '/../xml');
mkdir(__DIR__ . "/../xml", 0755);
if (!($fp = fopen($csv_datei, 'r'))) {
throw new MDmainEntityNotExistentException("Failed opening file");
}
$y = 0;
while ($zeile = fgetcsv($fp, 100000, ';')) {
$zeile = str_replace("\xEF\xBB\xBF", '', $zeile);
$y++;
$zieldatei = 'xml/' . $y . '.xml';
if (!$handle = fopen($zieldatei, 'w')) {
echo "Cannot open file ($zieldatei)";exit;
}
$xmlDoc = new DOMDocument("1.0", "UTF-8");
$xmlDoc->preserveWhiteSpace = false;
$xmlDoc->formatOutput = true;
# $xmlDoc->encoding = 'utf-8';
$xmlMainElem = $xmlDoc->createElement("record");
$record_node = $xmlDoc->appendChild($xmlMainElem); //add record element to XML node
# $rss_node->setAttribute("version", "2.0"); //set RSS version
$lineCount = count($zeile);
for ($x = 0; $x < $lineCount; $x++) {
$inhalt[$y][$x] = $zeile[$x];
if ($inhalt[$y][$x] == '') $inhalt[$y][$x] = 'ERSATZ';
$record_node->appendChild(createTextDomElement($xmlDoc, trim($inhalt[1][$x]), trim($inhalt[$y][$x])));
}
$somecontent = '<?xml version="1.0" encoding="UTF-8"?>' . $xmlDoc->saveXML($xmlDoc->documentElement);
# $somecontent .= '</record>';
//if ($y>1)
//{
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";exit;
}
fclose($handle);
}
fclose($fp);
echo printHTMLHead();
echo '
<div>
' . ($y - 1) . ' files created<br />
<hr/>
<a href="zipit.php" class="buttonLike">Download as ZIP</a>
</div>';

29
public/upload.php Normal file
View File

@ -0,0 +1,29 @@
<?PHP
declare(strict_types = 1);
require_once __DIR__ . "/../functions/functions.php";
$target = __DIR__ . "/../csv/" . basename($_FILES['uploaded']['name']);
$targetpart = basename($_FILES['uploaded']['name']);
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
if (validateAntiCsrfToken() === false) {
throw new MDWrongCsrfTokenException();
}
//This is our size condition
if ($uploaded_size > 40000000) {
echo "Your file is too large.<br>";
return;
}
//Here we check that $ok was not set to 0 by an error
//If everything is ok we try to upload it
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) {
echo "Sorry, there was a problem uploading your file.";
return;
}
header("Location: index3.php?fnam=" . basename($_FILES['uploaded']['name']));

43
public/zipit.php Normal file
View File

@ -0,0 +1,43 @@
<?PHP
require_once __DIR__ . "/../inc/zip.php";
require_once __DIR__ . "/../functions/functions.php";
$fileTime = date("D, d M Y H:i:s T");
$fileDir = __DIR__ . '/../xml/';
$zip = new Zip();
//$zip->setComment("Example Zip file.\nCreated on " . date('l jS \of F Y h:i:s A'));
if ($handle = opendir($fileDir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if (strpos($file, ".xml") !== false) {
$pathData = pathinfo($fileDir . $file);
$fileName = $pathData['filename'];
if ($file != '1.xml')
$zip->addFile(MD_STD::file_get_contents($fileDir . $file), $file, filectime($fileDir . $file));
}
}
}
if (ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
$zip->finalize(); // Not scrictly necessary, the next line will call it anyway.
$zipData = $zip->getZipData();
$length = strlen($zipData);
header('Pragma: public');
header("Last-Modified: " . $fileTime);
header("Expires: 0");
header("Accept-Ranges: bytes");
header("Connection: close");
header("Content-Type: application/zip");
header('Content-Disposition: attachment; filename="csv_xml.zip";' );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $length);
echo $zipData;
rrmdir(__DIR__ . '/../xml');