diff --git a/.gitignore b/.gitignore index 9ddeb8a..28c19a2 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ /conlite/logs/debug.log /cms/data/config/production/config.mod_rewrite.php /cms/data/config/production/config.local.php +/cms/cache/* diff --git a/.htaccess b/.htaccess index eeb264a..a4a8c5f 100644 --- a/.htaccess +++ b/.htaccess @@ -14,7 +14,11 @@ # $Id: htaccess_simple.txt 145 2019-10-25 16:00:47Z oldperl $ ################################################################################ -#SetEnv CONLITE_ENVIRONMENT dievino +# easily set this enviroment variable to the config you want to use +# add a config folder with the same name in data/config and cms/data/config +# and use your custom config for development + +#SetEnv CONLITE_ENVIRONMENT develop diff --git a/README.md b/README.md index a9b7443..58ca2d4 100644 --- a/README.md +++ b/README.md @@ -83,4 +83,4 @@ CONTENIDO 4.8.16 CL * 13 Bug Report FEUser-Plugins valide_to and valide_from saving wrong t ... * 9 Enhancement Check all translations (i18n) * 8 Bug Report adapt genericdb from 4.8.17 CL -* 5 Bug Report Buttontranslations missing or wrong \ No newline at end of file +* 5 Bug Report Buttontranslations missing or wrong diff --git a/cms/cache/.gitignore b/cms/cache/.gitignore deleted file mode 100644 index 86d0cb2..0000000 --- a/cms/cache/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/cms/css/basic-style.css b/cms/css/basic-style.css index a2c9e8b..9bd8a1f 100644 --- a/cms/css/basic-style.css +++ b/cms/css/basic-style.css @@ -1,523 +1,523 @@ -/* -Simple Responsive Template v 1.2 - - -primary styles - Author: www.prowebdesign.ro - Add your own styles to customize the project. - - - -BASE (MOBILE) SIZE - These are the mobile styles. It's what people see on their phones. - Remember, keep it light: Speed is Important. -*/ - -/* typography */ -body{ - color:#666; - font-family:'Ubuntu', Arial, Helvetica, sans-serif; - font-size:1em; - line-height:1.4em; - font-weight:normal; -} -h1, h2, h3, h4, h5, h6{ - font-weight:normal; - font-family:'Droid Serif', Arial, Helvetica, sans-serif; - line-height:1.5em; - margin:.45em 0; - padding:0; -} - - -/* links */ -a, -a:visited, -a:active, -a:hover{color:#0099ff;} -a:hover{ text-decoration:none;} - - -/* Box sizing. Awesome thing. Read about it here: http://www.w3schools.com/cssref/css3_pr_box-sizing.asp */ -*{ box-sizing:border-box; - -moz-box-sizing:border-box;} - - -/* structure */ -.wrapper{ - width: 92%; - margin: 0 auto; -} -header{ - padding:15px 0; -} -#banner{ - text-align:center; -} - -#hero, -#page-header{ - background:#f3f3f3; - border-top:1px solid #e2e2e2; - border-bottom:1px solid #e2e2e2; - padding:20px 0; -} -#hero h1{ - line-height:1.2em; - margin-top:0px; - margin-bottom:10px;} - -.flexslider{ - display:none; -} - -#content { - margin:40px 0; -} - -aside { - margin:40px 0; -} - -p{ margin:0 0 1.5em;} - - -/* RESPONSIVE IMAGES */ -img{ max-width:100%; height:auto;} - - -/*MAIN MENU*/ -.menu-toggle{ - display:block; - padding:10px; - margin:20px 0 0; - background:#666; - color:#fff; - cursor:pointer; - text-transform:uppercase; - font-size:20px; -} -.menu-toggle.toggled-on{ - background:#0099ff; -} -.srt-menu{ - display:none; -} -.srt-menu.toggled-on{ - display:block; - position:relative; - z-index:10; -} - -.srt-menu{ - clear:both; - margin-bottom:60px; - -} -.srt-menu li a { - background:#dadada; - display:block; - margin:1px 0; - padding:10px; - text-decoration:none; -} -.srt-menu li a:hover{ - background:#0099ff; - color:#fff; -} -.srt-menu li li a { - background:#e8e8e8; - padding-left:40px; -} -.srt-menu li li li a { - background:#efefef; - padding-left:80px; -} - -/*SECONDARY MENU*/ -#secondary-navigation{ - margin-bottom:60px; -} -#secondary-navigation ul{ - margin:0; - padding:0; -} -#secondary-navigation ul li a{ - background:#E6E6E6; - display:block; - margin:5px 0; - padding:10px; - text-decoration:none; -} -#secondary-navigation ul li a:hover, -#secondary-navigation ul li.active a{ - background:#0099ff; - color:#fff; -} - -/*SPACE GRID ELEMENTS VERTICALLY, SINCE THEY ARE ONE UNDER ANOTHER SO FAR*/ -.grid_1, -.grid_2, -.grid_3, -.grid_4, -.grid_5, -.grid_6, -.grid_7, -.grid_8, -.grid_9, -.grid_10, -.grid_11, -.grid_12 { - margin-bottom:40px; - /*positioning and padding*/ - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} - -/*FOOTER*/ -footer{ - clear:both; - font-size:80%; - padding:20px 0; -} -footer ul{ - margin:0; - padding:0; -} - -/*colors and backgrounds*/ -body{ - background:#fff; -} -h1, h2, h3, h4, h5, h6{ - color:#333; -} - -footer{ - background:#333; - color:#ccc; -} -footer h1, footer h2, footer h3, footer h4{ - color:#CCC; - margin-bottom:10px; -} -footer ul{ - margin:0 0 0 8%; -} - -a.buttonlink{ - background:#0099ff; - border-radius:7px; - color:#fff; - display:block; - float:left; - margin:10px 15px 10px 0; - padding:10px; - text-decoration:none; -} -a.buttonlink:hover{ - background:#8dbc01; -} -.greenelement{ - background:#5ec79e; - color:#fff; -} -.violetelement{ - background:#887dc2; - color:#fff; -} - - - -/* Contain floats*/ -.clearfix:before, -.clearfix:after, -.row:before, -.row:after { - content: " "; - display: table; -} -.clearfix:after, -.container:after, -.row:after{ - clear: both; -} - - -/* -LARGER MOBILE DEVICES -This is for mobile devices with a bit larger screens. -*/ -@media only screen and (min-width: 481px) { -#banner{ - float:left; - text-align:left; - margin-bottom:-20px;/*this depends on the height of the logo*/ -} -.menu-toggle{/*make menu float right, instead of sitting under the logo*/ - margin-top:10px; /*this depends on the height of the logo*/ - float:right; -} - -} - -/* -TABLET & SMALLER LAPTOPS -The average viewing window and preferred media query for those is 768px. -But I think that some more breathing space is good:) -*/ -@media only screen and (min-width: 920px) { - -.wrapper{ - max-width: 1200px; - margin: .75em auto; -} - -#banner{ - float:left; - text-align:left; - margin-bottom:0px; -} -header{ - padding:0; -} -#content { - float:left; - width:65%; -} -#content.wide-content{ - float:none; - width:100%; -} - -.flexslider{ -display:block; -/*demo 1 slider theme*/ -margin: 0 0 60px; -background: #fff; -border: 4px solid #fff; --webkit-border-radius: 4px; --moz-border-radius: 4px; --o-border-radius: 4px; -border-radius: 4px; -box-shadow: 0 1px 4px rgba(0,0,0,.2); --webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); --moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); --o-box-shadow: 0 1px 4px rgba(0,0,0,.2); -} - - -aside { - float:right; - width:30%; -} - -/*** MAIN MENU - ESSENTIAL STYLES ***/ -.menu-toggle{display:none;} -#menu-main-navigation{display:block;} - -.srt-menu, .srt-menu * { - margin: 0; - padding: 0; - list-style: none; -} -.srt-menu ul { - position: absolute; - display:none; - width: 12em; /* left offset of submenus need to match (see below) */ -} -.srt-menu ul li { - width: 100%; -} -.srt-menu li:hover { - visibility: inherit; /* fixes IE7 'sticky bug' */ -} -.srt-menu li { - float: left; - position: relative; - margin-left:1px; -} -.srt-menu li li { - margin-left:0px; -} -.srt-menu a { - display: block; - position: relative; -} -.srt-menu li:hover ul, -.srt-menu li.sfHover ul { - display:block; - left: 0; - top: 45px; /* match top ul list item height */ - z-index: 99; - -webkit-box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); - box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); -} -ul.srt-menu li:hover li ul, -ul.srt-menu li.sfHover li ul { - top: -999em; -} -ul.srt-menu li li:hover ul, -ul.srt-menu li li.sfHover ul { - left: 12em; /* match ul width */ - top: 0; -} -ul.srt-menu li li:hover li ul, -ul.srt-menu li li.sfHover li ul { - top: -999em; -} -ul.srt-menu li li li:hover ul, -ul.srt-menu li li li.sfHover ul { - left: 10em; /* match ul width */ - top: 0; -} - -/*** DEMO1 SKIN ***/ -#topnav, .srt-menu { - float:right; - margin: .35em 0 0 0; -} -.srt-menu a { - text-decoration:none; -} -.srt-menu li a { - background:#fff; - margin:0; - padding:10px 20px; - height:45px; -} -.srt-menu a, .srt-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ - color: #0099ff; -} -.srt-menu li li a { - border-top: 1px solid rgba(255,255,255,.2); - background: #333; /*fallback for old IE*/ - background:rgba(0,0,0,.6); - color: #fff; - padding-left:20px; - height:auto; -} -.srt-menu li li a:visited{color:#fff;} -.srt-menu li li li a, -.srt-menu li.active * li a{ - padding-left:20px; - background:rgba(0,0,0,.6); -} - -.srt-menu li:hover > a, -.srt-menu li.active a{ - color:#fff; - background:#0099ff; -} -.srt-menu li li:hover > a{ - color:#fff; - background:#0099ff; -} - - - -/*GRID*/ -/* - & Columns : 12 - - */ - .row{ - margin-left: -15px; - margin-right: -15px; -} - -.grid_1 { width: 8.33333333%; } -.grid_2 { width: 16.66666667%; } -.grid_3 { width: 25%; } -.grid_4 { width: 33.33333333%; } -.grid_5 { width: 41.66666667%; } -.grid_6 { width: 50%; } -.grid_7 { width: 58.33333333%; } -.grid_8 { width: 66.66666667%; } -.grid_9 { width: 75%; } -.grid_10 { width: 83.33333333%; } -.grid_11 { width: 91.66666667%; } -.grid_12 { width: 100%; } - -.grid_1, -.grid_2, -.grid_3, -.grid_4, -.grid_5, -.grid_6, -.grid_7, -.grid_8, -.grid_9, -.grid_10, -.grid_11, -.grid_12 { - float: left; - display: block; -} - -.rightfloat{float:right;} -/* @notation inspired by tinyGrid, .row and percentage by Twitter Bootstrap - */ - -#hero [class*="grid_"] { margin-bottom:-20px;} - -} - -/* -DESKTOP -This is the average viewing window. So Desktops, Laptops, and -in general anyone not viewing on a mobile device. Here's where -you can add resource intensive styles. -*/ -@media only screen and (min-width: 1030px) { - -} - -/* -LARGE VIEWING SIZE -This is for the larger monitors and possibly full screen viewers. -*/ -@media only screen and (min-width: 1240px) { - -} - -/* -RETINA (2x RESOLUTION DEVICES) -This applies to the retina iPhone (4s) and iPad (2,3) along with -other displays with a 2x resolution. -*/ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min--moz-device-pixel-ratio: 1.5), - only screen and (min-device-pixel-ratio: 1.5) { - - -} - -/* -iPHONE 5 MEDIA QUERY -iPhone 5 or iPod Touch 5th generation styles (you can include your own file if you want) -*/ -@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) { - - -} - -/* -PRINT STYLESHEET -*/ -@media print { - * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */ - a, a:visited { text-decoration: underline; } - a[href]:after { content: " (" attr(href) ")"; } - abbr[title]:after { content: " (" attr(title) ")"; } - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */ - pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } - thead { display: table-header-group; } /* h5bp.com/t */ - tr, img { page-break-inside: avoid; } - img { max-width: 100% !important; } - @page { margin: 0.5cm; } - p, h2, h3 { orphans: 3; widows: 3; } - h2, h3 { page-break-after: avoid; } +/* +Simple Responsive Template v 1.2 test + + +primary styles + Author: www.prowebdesign.ro + Add your own styles to customize the project. + + + +BASE (MOBILE) SIZE + These are the mobile styles. It's what people see on their phones. + Remember, keep it light: Speed is Important. +*/ + +/* typography */ +body{ + color:#666; + font-family:'Ubuntu', Arial, Helvetica, sans-serif; + font-size:1em; + line-height:1.4em; + font-weight:normal; +} +h1, h2, h3, h4, h5, h6{ + font-weight:normal; + font-family:'Droid Serif', Arial, Helvetica, sans-serif; + line-height:1.5em; + margin:.45em 0; + padding:0; +} + + +/* links */ +a, +a:visited, +a:active, +a:hover{color:#0099ff;} +a:hover{ text-decoration:none;} + + +/* Box sizing. Awesome thing. Read about it here: http://www.w3schools.com/cssref/css3_pr_box-sizing.asp */ +*{ box-sizing:border-box; + -moz-box-sizing:border-box;} + + +/* structure */ +.wrapper{ + width: 92%; + margin: 0 auto; +} +header{ + padding:15px 0; +} +#banner{ + text-align:center; +} + +#hero, +#page-header{ + background:#f3f3f3; + border-top:1px solid #e2e2e2; + border-bottom:1px solid #e2e2e2; + padding:20px 0; +} +#hero h1{ + line-height:1.2em; + margin-top:0px; + margin-bottom:10px;} + +.flexslider{ + display:none; +} + +#content { + margin:40px 0; +} + +aside { + margin:40px 0; +} + +p{ margin:0 0 1.5em;} + + +/* RESPONSIVE IMAGES */ +img{ max-width:100%; height:auto;} + + +/*MAIN MENU*/ +.menu-toggle{ + display:block; + padding:10px; + margin:20px 0 0; + background:#666; + color:#fff; + cursor:pointer; + text-transform:uppercase; + font-size:20px; +} +.menu-toggle.toggled-on{ + background:#0099ff; +} +.srt-menu{ + display:none; +} +.srt-menu.toggled-on{ + display:block; + position:relative; + z-index:10; +} + +.srt-menu{ + clear:both; + margin-bottom:60px; + +} +.srt-menu li a { + background:#dadada; + display:block; + margin:1px 0; + padding:10px; + text-decoration:none; +} +.srt-menu li a:hover{ + background:#0099ff; + color:#fff; +} +.srt-menu li li a { + background:#e8e8e8; + padding-left:40px; +} +.srt-menu li li li a { + background:#efefef; + padding-left:80px; +} + +/*SECONDARY MENU*/ +#secondary-navigation{ + margin-bottom:60px; +} +#secondary-navigation ul{ + margin:0; + padding:0; +} +#secondary-navigation ul li a{ + background:#E6E6E6; + display:block; + margin:5px 0; + padding:10px; + text-decoration:none; +} +#secondary-navigation ul li a:hover, +#secondary-navigation ul li.active a{ + background:#0099ff; + color:#fff; +} + +/*SPACE GRID ELEMENTS VERTICALLY, SINCE THEY ARE ONE UNDER ANOTHER SO FAR*/ +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + margin-bottom:40px; + /*positioning and padding*/ + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +/*FOOTER*/ +footer{ + clear:both; + font-size:80%; + padding:20px 0; +} +footer ul{ + margin:0; + padding:0; +} + +/*colors and backgrounds*/ +body{ + background:#fff; +} +h1, h2, h3, h4, h5, h6{ + color:#333; +} + +footer{ + background:#333; + color:#ccc; +} +footer h1, footer h2, footer h3, footer h4{ + color:#CCC; + margin-bottom:10px; +} +footer ul{ + margin:0 0 0 8%; +} + +a.buttonlink{ + background:#0099ff; + border-radius:7px; + color:#fff; + display:block; + float:left; + margin:10px 15px 10px 0; + padding:10px; + text-decoration:none; +} +a.buttonlink:hover{ + background:#8dbc01; +} +.greenelement{ + background:#5ec79e; + color:#fff; +} +.violetelement{ + background:#887dc2; + color:#fff; +} + + + +/* Contain floats*/ +.clearfix:before, +.clearfix:after, +.row:before, +.row:after { + content: " "; + display: table; +} +.clearfix:after, +.container:after, +.row:after{ + clear: both; +} + + +/* +LARGER MOBILE DEVICES +This is for mobile devices with a bit larger screens. +*/ +@media only screen and (min-width: 481px) { +#banner{ + float:left; + text-align:left; + margin-bottom:-20px;/*this depends on the height of the logo*/ +} +.menu-toggle{/*make menu float right, instead of sitting under the logo*/ + margin-top:10px; /*this depends on the height of the logo*/ + float:right; +} + +} + +/* +TABLET & SMALLER LAPTOPS +The average viewing window and preferred media query for those is 768px. +But I think that some more breathing space is good:) +*/ +@media only screen and (min-width: 920px) { + +.wrapper{ + max-width: 1200px; + margin: .75em auto; +} + +#banner{ + float:left; + text-align:left; + margin-bottom:0px; +} +header{ + padding:0; +} +#content { + float:left; + width:65%; +} +#content.wide-content{ + float:none; + width:100%; +} + +.flexslider{ +display:block; +/*demo 1 slider theme*/ +margin: 0 0 60px; +background: #fff; +border: 4px solid #fff; +-webkit-border-radius: 4px; +-moz-border-radius: 4px; +-o-border-radius: 4px; +border-radius: 4px; +box-shadow: 0 1px 4px rgba(0,0,0,.2); +-webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); +-moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); +-o-box-shadow: 0 1px 4px rgba(0,0,0,.2); +} + + +aside { + float:right; + width:30%; +} + +/*** MAIN MENU - ESSENTIAL STYLES ***/ +.menu-toggle{display:none;} +#menu-main-navigation{display:block;} + +.srt-menu, .srt-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.srt-menu ul { + position: absolute; + display:none; + width: 12em; /* left offset of submenus need to match (see below) */ +} +.srt-menu ul li { + width: 100%; +} +.srt-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.srt-menu li { + float: left; + position: relative; + margin-left:1px; +} +.srt-menu li li { + margin-left:0px; +} +.srt-menu a { + display: block; + position: relative; +} +.srt-menu li:hover ul, +.srt-menu li.sfHover ul { + display:block; + left: 0; + top: 45px; /* match top ul list item height */ + z-index: 99; + -webkit-box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); + box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); +} +ul.srt-menu li:hover li ul, +ul.srt-menu li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li:hover ul, +ul.srt-menu li li.sfHover ul { + left: 12em; /* match ul width */ + top: 0; +} +ul.srt-menu li li:hover li ul, +ul.srt-menu li li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li li:hover ul, +ul.srt-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** DEMO1 SKIN ***/ +#topnav, .srt-menu { + float:right; + margin: .35em 0 0 0; +} +.srt-menu a { + text-decoration:none; +} +.srt-menu li a { + background:#fff; + margin:0; + padding:10px 20px; + height:45px; +} +.srt-menu a, .srt-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #0099ff; +} +.srt-menu li li a { + border-top: 1px solid rgba(255,255,255,.2); + background: #333; /*fallback for old IE*/ + background:rgba(0,0,0,.6); + color: #fff; + padding-left:20px; + height:auto; +} +.srt-menu li li a:visited{color:#fff;} +.srt-menu li li li a, +.srt-menu li.active * li a{ + padding-left:20px; + background:rgba(0,0,0,.6); +} + +.srt-menu li:hover > a, +.srt-menu li.active a{ + color:#fff; + background:#0099ff; +} +.srt-menu li li:hover > a{ + color:#fff; + background:#0099ff; +} + + + +/*GRID*/ +/* + & Columns : 12 + + */ + .row{ + margin-left: -15px; + margin-right: -15px; +} + +.grid_1 { width: 8.33333333%; } +.grid_2 { width: 16.66666667%; } +.grid_3 { width: 25%; } +.grid_4 { width: 33.33333333%; } +.grid_5 { width: 41.66666667%; } +.grid_6 { width: 50%; } +.grid_7 { width: 58.33333333%; } +.grid_8 { width: 66.66666667%; } +.grid_9 { width: 75%; } +.grid_10 { width: 83.33333333%; } +.grid_11 { width: 91.66666667%; } +.grid_12 { width: 100%; } + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + float: left; + display: block; +} + +.rightfloat{float:right;} +/* @notation inspired by tinyGrid, .row and percentage by Twitter Bootstrap + */ + +#hero [class*="grid_"] { margin-bottom:-20px;} + +} + +/* +DESKTOP +This is the average viewing window. So Desktops, Laptops, and +in general anyone not viewing on a mobile device. Here's where +you can add resource intensive styles. +*/ +@media only screen and (min-width: 1030px) { + +} + +/* +LARGE VIEWING SIZE +This is for the larger monitors and possibly full screen viewers. +*/ +@media only screen and (min-width: 1240px) { + +} + +/* +RETINA (2x RESOLUTION DEVICES) +This applies to the retina iPhone (4s) and iPad (2,3) along with +other displays with a 2x resolution. +*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5) { + + +} + +/* +iPHONE 5 MEDIA QUERY +iPhone 5 or iPod Touch 5th generation styles (you can include your own file if you want) +*/ +@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) { + + +} + +/* +PRINT STYLESHEET +*/ +@media print { + * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */ + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */ + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; } /* h5bp.com/t */ + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } } \ No newline at end of file diff --git a/cms/front_content.php b/cms/front_content.php index 93e81b9..a5805cd 100644 --- a/cms/front_content.php +++ b/cms/front_content.php @@ -102,21 +102,12 @@ if (!empty($contenido)) { page_open(array('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); } -/** - * Bugfix - * @see http://contenido.org/forum/viewtopic.php?t=18291 - * - * added by H. Librenz (2007-12-07) - */ -//includePluginConf(); -/** - * fixed bugfix - using functions brokes variable scopes! - * - * added by H. Librenz (2007-12-21) based on an idea of A. Lindner - */ require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; -$db = new DB_Contenido; +// Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 +CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); + +$db = new DB_ConLite(); $sess->register("cfgClient"); $sess->register("errsite_idcat"); @@ -654,7 +645,7 @@ if (empty($inUse) && (isset($allow) && $allow == true) && $view == "edit" && ($p WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '" . Contenido_Security::escapeDB($user_id, $db2) . "' AND A.idcat = '" . Contenido_Security::toInteger($idcat) . "' AND A.idarea = C.idarea AND B.idaction = A.idaction"; - $db2 = new DB_Contenido; + $db2 = new DB_ConLite(); $db2->query($sql); if ($db2->num_rows() > 0) { @@ -854,5 +845,4 @@ if (isset($savedlang)) { } $db->disconnect(); -page_close(); -?> \ No newline at end of file +page_close(); \ No newline at end of file diff --git a/cms/templates/cms_filelist_style_default.html b/cms/templates/cms_filelist_style_default.html index 010eeeb..3949b8f 100644 --- a/cms/templates/cms_filelist_style_default.html +++ b/cms/templates/cms_filelist_style_default.html @@ -1,18 +1,18 @@ - -

{TITLE}

- - -
- {FILENAME} ({FILEEXTENSION})
- {LABEL_FILESIZE} {FILESIZE} {FILESIZE_UNIT}
- {LABEL_UPLOAD_DATE} {FILECREATIONDATE}
- {FILEMETA_DESCRIPTION} -
- + +

{TITLE}

+ + +
+ {FILENAME} ({FILEEXTENSION})
+ {LABEL_FILESIZE} {FILESIZE} {FILESIZE_UNIT}
+ {LABEL_UPLOAD_DATE} {FILECREATIONDATE}
+ {FILEMETA_DESCRIPTION} +
+
\ No newline at end of file diff --git a/composer.json b/composer.json index bf55408..28fb480 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "vendor-dir": "conlite/external" }, "require": { - "endroid/qr-code": "4.2.*", + "endroid/qr-code": "1.9.*", "phpmailer/phpmailer": "v5.2.*" }, "autoload": { diff --git a/composer.lock b/composer.lock index dca4982..232cd10 100644 --- a/composer.lock +++ b/composer.lock @@ -4,142 +4,38 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "48fd8001d143baf1abc5be3ae05467fd", + "content-hash": "e89f8a75b1a9d3be271cdb0aafea0cfa", "packages": [ - { - "name": "bacon/bacon-qr-code", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0.3", - "ext-iconv": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "type": "library", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "support": { - "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.4" - }, - "time": "2021-06-18T13:26:35+00:00" - }, - { - "name": "dasprid/enum", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" - }, - "time": "2020-10-02T16:03:48+00:00" - }, { "name": "endroid/qr-code", - "version": "4.2.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/endroid/qr-code.git", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78" + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code/zipball/53bfce79da95bf082484301fecbc1d77a3907f78", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/c9644bec2a9cc9318e98d1437de3c628dcd1ef93", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "php": "^7.3||^8.0" + "ext-gd": "*", + "php": ">=5.4", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "endroid/quality": "dev-master", - "ext-gd": "*", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" - }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" + "phpunit/phpunit": "^4.0|^5.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -154,29 +50,25 @@ "authors": [ { "name": "Jeroen van den Enden", - "email": "info@endroid.nl" + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" } ], "description": "Endroid QR Code", - "homepage": "https://github.com/endroid/qr-code", + "homepage": "https://github.com/endroid/QrCode", "keywords": [ + "bundle", "code", "endroid", - "php", "qr", - "qrcode" + "qrcode", + "symfony" ], "support": { "issues": "https://github.com/endroid/qr-code/issues", - "source": "https://github.com/endroid/qr-code/tree/4.2.2" + "source": "https://github.com/endroid/qr-code/tree/1.9.3" }, - "funding": [ - { - "url": "https://github.com/endroid", - "type": "github" - } - ], - "time": "2021-08-16T22:08:35+00:00" + "time": "2017-04-08T09:13:59+00:00" }, { "name": "phpmailer/phpmailer", @@ -272,6 +164,72 @@ } ], "time": "2020-03-19T14:29:37+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T10:57:07+00:00" } ], "packages-dev": [], @@ -282,5 +240,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } diff --git a/conlite/classes/class.ui.php b/conlite/classes/class.ui.php index 4139941..bb09faf 100644 --- a/conlite/classes/class.ui.php +++ b/conlite/classes/class.ui.php @@ -1302,8 +1302,7 @@ class cScrollList { $this->sortkey = $field; $this->sortmode = $order; - - $field = $field + 1; + $field = intval($field) + 1; $this->data = array_csort($this->data, "$field", $order); } diff --git a/conlite/classes/contenido/class.module.php b/conlite/classes/contenido/class.module.php index 5a58cf7..aa9a6ff 100644 --- a/conlite/classes/contenido/class.module.php +++ b/conlite/classes/contenido/class.module.php @@ -1057,6 +1057,8 @@ class cApiModule extends Item { class cApiModuleTranslationCollection extends ItemCollection { protected $_error; + + protected $f_obj; /** * Constructor Function diff --git a/conlite/external/autoload.php b/conlite/external/autoload.php index d912bfb..955af5a 100644 --- a/conlite/external/autoload.php +++ b/conlite/external/autoload.php @@ -2,6 +2,11 @@ // autoload.php @generated by Composer +if (PHP_VERSION_ID < 50600) { + echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + exit(1); +} + require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb::getLoader(); diff --git a/conlite/external/backendedit/front_content.php b/conlite/external/backendedit/front_content.php index dd8d55c..aa37f37 100644 --- a/conlite/external/backendedit/front_content.php +++ b/conlite/external/backendedit/front_content.php @@ -1,4 +1,5 @@ * @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @link http://www.contenido.org * @since file available since contenido release <= 4.6 - * - * {@internal - * created 2003-01-21 - * modified 2008-07-02, Frederic Schneider, add security fix and include class_security - * modified 2008-08-29, Murat Purc, synchronised with /cms/front_content.php - * modified 2008-11-18, Timo Trautmann: in backendeditmode also check if logged in backenduser has permission to view preview of page - * modified 2009-04-16, OliverL, check return from Contenido.Frontend.HTMLCodeOutput - * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready) - * modified 2009-12-31, Murat Purc, fixed/modified CEC_Hook, see [#CON-256] - * modified 2010-05-20, Murat Purc, moved security checks into startup process, see [#CON-307] - * modified 2010-09-23, Murat Purc, fixed $encoding handling, see [#CON-305] - * modified 2011-02-07, Dominik Ziegler, added exit after redirections to force their execution - * modified 2011-02-10, Dominik Ziegler, moved function declaration of IP_match out of front_content.php - * - * $Id$: - * }} - * */ - if (!defined("CON_FRAMEWORK")) { define("CON_FRAMEWORK", true); } -# Contenido startup process -include_once ('../../includes/startup.php'); +$contenido_path = dirname(__FILE__, 3) . DIRECTORY_SEPARATOR; +if (!is_file($contenido_path . 'includes/startup.php')) { + die("

Fatal Error


Couldn't include ConLite startup."); +} +include_once($contenido_path . 'includes/startup.php'); rereadClients(); +$frontend_path = cRegistry::getClientConfig(cRegistry::getClientId())['path']['frontend']; -# include the config file of the frontend to init the Client and Language Id -include_once ($cfgClient[$client]["path"]["frontend"]."config.php"); -chdir($cfgClient[$client]["path"]["frontend"]); +// Include the environment definer file +include_once($frontend_path . 'environment.php'); + +if (defined('CL_ENVIRONMENT')) { + include_once($frontend_path . 'data/config/' . CL_ENVIRONMENT . '/config.php'); + + if (file_exists($frontend_path . 'data/config/' . CL_ENVIRONMENT . '/config.local.php')) { + @include($frontend_path . 'data/config/' . CL_ENVIRONMENT . '/config.local.php'); + } +} else { + if (file_exists($frontend_path . 'config.php')) { + include_once($frontend_path . 'config.php'); + } + if (file_exists($frontend_path . 'config.local.php')) { + include_once($frontend_path . 'config.local.php'); + } +} cInclude("includes", "functions.con.php"); cInclude("includes", "functions.con2.php"); cInclude("includes", "functions.api.php"); cInclude("includes", "functions.pathresolver.php"); -if ($cfg["use_pseudocron"] == true) -{ +if ($cfg["use_pseudocron"] == true) { /* Include cronjob-Emulator */ $oldpwd = getcwd(); - chdir($cfg["path"]["contenido"].$cfg["path"]["cronjobs"]); + chdir($cfg["path"]["contenido"] . $cfg["path"]["cronjobs"]); cInclude("includes", "pseudo-cron.inc.php"); chdir($oldpwd); } @@ -92,49 +92,48 @@ if ($cfg["use_pseudocron"] == true) * PHPLIB application development toolkit * @see http://sourceforge.net/projects/phplib */ -if ($contenido) -{ +if (!empty($contenido)) { //Backend - page_open(array ('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); - i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); -} -else -{ + page_open(array('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); + i18nInit($cfg["path"]["contenido"] . $cfg["path"]["locale"], $belang); +} else { //Frontend - page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); + page_open(array('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); } -/** - * Bugfix - * @see http://contenido.org/forum/viewtopic.php?t=18291 - * - * added by H. Librenz (2007-12-07) - */ -//includePluginConf(); -/** - * fixed bugfix - using functions brokes variable scopes! - * - * added by H. Librenz (2007-12-21) based on an idea of A. Lindner - */ require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; // Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); -$db = new DB_ConLite; +$db = new DB_ConLite(); $sess->register("cfgClient"); $sess->register("errsite_idcat"); $sess->register("errsite_idart"); $sess->register("encoding"); -if ($cfgClient["set"] != "set") -{ +if (empty($cfgClient["set"]) || $cfgClient["set"] != "set") { rereadClients(); } -if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) -{ +# Check if this request is for a compressed file +if (isset($_GET['action']) && $_GET['action'] == 'get_compressed') { + # Get the calling parameters + $sFilename = ((isset($_GET['f'])) ? $_GET['f'] : $_GET['amp;f']); + $sContentType = ((isset($_GET['c'])) ? $_GET['c'] : $_GET['amp;c']); + + # Output the file using the class output() function + Output_Compressor::output($cfgClient[$client]['path']['frontend'] . 'cache/', $sFilename, $sContentType); + + # Don't do anything else + exit(); +} + +// Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 +CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); + +if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) { // get encodings of all languages $encoding = array(); $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"]; @@ -149,27 +148,25 @@ if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) // @TODO: Should be outsourced into startup process but requires a better detection (frontend or backend) Contenido_Security::checkFrontendGlobals(); - // update urlbuilder set http base path Contenido_Url::getInstance()->getUrlBuilder()->setHttpBasePath($cfgClient[$client]['htmlpath']['frontend']); - // Initialize language if (!isset($lang)) { // if there is an entry load_lang in frontend/config.php use it, else use the first language of this client - if(isset($load_lang)){ + if (isset($load_lang)) { // load_client is set in frontend/config.php $lang = $load_lang; - }else{ + } else { $sql = "SELECT B.idlang FROM - ".$cfg["tab"]["clients_lang"]." AS A, - ".$cfg["tab"]["lang"]." AS B + " . $cfg["tab"]["clients_lang"] . " AS A, + " . $cfg["tab"]["lang"] . " AS B WHERE - A.idclient='".Contenido_Security::toInteger($client)."' AND + A.idclient='" . Contenido_Security::toInteger($client) . "' AND A.idlang = B.idlang LIMIT 0,1"; @@ -181,11 +178,12 @@ if (!isset($lang)) { } } -if (!$sess->is_registered("lang") ) $sess->register("lang"); -if (!$sess->is_registered("client") ) $sess->register("client"); +if (!$sess->is_registered("lang")) + $sess->register("lang"); +if (!$sess->is_registered("client")) + $sess->register("client"); -if (isset ($username)) -{ +if (isset($username)) { $auth->login_if(true); } @@ -198,8 +196,7 @@ header("Content-Type: text/html; charset={$encoding[$lang]}"); * if http global logout is set e.g. front_content.php?logout=true * log out the current user. */ -if (isset ($logout)) -{ +if (isset($logout)) { $auth->logout(true); $auth->unauth(true); $auth->auth["uname"] = "nobody"; @@ -208,8 +205,7 @@ if (isset ($logout)) /* * local configuration */ -if (file_exists("config.local.php")) -{ +if (file_exists("config.local.php")) { @ include ("config.local.php"); } @@ -217,156 +213,124 @@ if (file_exists("config.local.php")) * If the path variable was passed, try to resolve it to a Category Id * e.g. front_content.php?path=/company/products/ */ -if (isset($path) && strlen($path) > 1) -{ +if (isset($path) && strlen($path) > 1) { /* Which resolve method is configured? */ - if ($cfg["urlpathresolve"] == true) - { + if ($cfg["urlpathresolve"] == true) { $iLangCheck = 0; $idcat = prResolvePathViaURLNames($path, $iLangCheck); - - } - else - { + } else { $iLangCheck = 0; $idcat = prResolvePathViaCategoryNames($path, $iLangCheck); - if(($lang != $iLangCheck) && ((int)$iLangCheck != 0)){ + if (($lang != $iLangCheck) && ((int) $iLangCheck != 0)) { $lang = $iLangCheck; } - } } // error page -$aParams = array ( - 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], - 'lang' => $lang, 'error'=> '1' +$aParams = array( + 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], + 'lang' => $lang, 'error' => '1' ); $errsite = 'Location: ' . Contenido_Url::getInstance()->buildRedirect($aParams); - /* * Try to initialize variables $idcat, $idart, $idcatart, $idartlang * Note: These variables can be set via http globals e.g. front_content.php?idcat=41&idart=34&idcatart=35&idartlang=42 * If not the values will be computed. */ -if ($idart && !$idcat && !$idcatart) -{ +if ($idart && !$idcat && !$idcatart) { /* Try to fetch the first idcat */ - $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $sql = "SELECT idcat FROM " . $cfg["tab"]["cat_art"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "'"; $db->query($sql); - if ($db->next_record()) - { + if ($db->next_record()) { $idcat = $db->f("idcat"); } } -unset ($code); -unset ($markscript); +unset($code); +unset($markscript); -if (!$idcatart) -{ - if (!$idart) - { - if (!$idcat) - { +if (empty($idcatart)) { + if (empty($idart)) { + if (empty($idcat)) { # Note: In earlier Contenido versions the information if an article is startarticle of a category has been stored # in relation con_cat_art. - if ($cfg["is_start_compatible"] == true) - { + if ($cfg["is_start_compatible"] == true) { $sql = "SELECT idart, B.idcat FROM - ".$cfg["tab"]["cat_art"]." AS A, - ".$cfg["tab"]["cat_tree"]." AS B, - ".$cfg["tab"]["cat"]." AS C + " . $cfg["tab"]["cat_art"] . " AS A, + " . $cfg["tab"]["cat_tree"] . " AS B, + " . $cfg["tab"]["cat"] . " AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND is_start='1' AND - idclient='".Contenido_Security::toInteger($client)."' + idclient='" . Contenido_Security::toInteger($client) . "' ORDER BY idtree ASC"; - } - else - { + } else { # Note: Now the information if an article is startarticle of a category is stored in relation con_cat_lang. $sql = "SELECT A.idart, B.idcat FROM - ".$cfg["tab"]["cat_art"]." AS A, - ".$cfg["tab"]["cat_tree"]." AS B, - ".$cfg["tab"]["cat"]." AS C, - ".$cfg["tab"]["cat_lang"]." AS D, - ".$cfg["tab"]["art_lang"]." AS E + " . $cfg["tab"]["cat_art"] . " AS A, + " . $cfg["tab"]["cat_tree"] . " AS B, + " . $cfg["tab"]["cat"] . " AS C, + " . $cfg["tab"]["cat_lang"] . " AS D, + " . $cfg["tab"]["art_lang"] . " AS E WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND D.startidartlang = E.idartlang AND - D.idlang='".Contenido_Security::toInteger($lang)."' AND + D.idlang='" . Contenido_Security::toInteger($lang) . "' AND E.idart=A.idart AND - E.idlang='".Contenido_Security::toInteger($lang)."' AND - idclient='".Contenido_Security::toInteger($client)."' + E.idlang='" . Contenido_Security::toInteger($lang) . "' AND + idclient='" . Contenido_Security::toInteger($client) . "' ORDER BY idtree ASC"; } $db->query($sql); - if ($db->next_record()) - { + if ($db->next_record()) { $idart = $db->f("idart"); $idcat = $db->f("idcat"); - } - else - { - if ($contenido) - { + } else { + if (!empty($contenido)) { cInclude("includes", "functions.i18n.php"); die(i18n("No start article for this category")); - } - else - { - if ($error == 1) - { - echo "Fatal error: Could not display error page. Error to display was: 'No start article in this category'"; - } - else - { + } else { + if ($error == 1) { + die("Fatal error: Could not display error page. Error to display was: 'No start article in this category'"); + } else { header($errsite); - exit; + exit; } } } - } - else - { + } else { $idart = -1; - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND is_start='1'"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND is_start='1'"; $db->query($sql); - if ($db->next_record()) - { + if ($db->next_record()) { $idart = $db->f("idart"); } - } - else - { - $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT startidartlang FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); - if ($db->next_record()) - { - if ($db->f("startidartlang") != 0) - { - $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($db->f("startidartlang"))."'"; + if ($db->next_record()) { + if ($db->f("startidartlang") != 0) { + $sql = "SELECT idart FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang='" . Contenido_Security::toInteger($db->f("startidartlang")) . "'"; $db->query($sql); $db->next_record(); $idart = $db->f("idart"); @@ -374,36 +338,26 @@ if (!$idcatart) } } - if ($idart != -1) - { - } - else - { + if ($idart != -1) { + + } else { // error message in backend - if ($contenido) - { + if ($contenido) { cInclude("includes", "functions.i18n.php"); die(i18n("No start article for this category")); - } - else - { - if ($error == 1) - { + } else { + if ($error == 1) { echo "Fatal error: Could not display error page. Error to display was: 'No start article in this category'"; - } - else - { + } else { header($errsite); - exit; + exit; } } } } } -} -else -{ - $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; +} else { + $sql = "SELECT idcat, idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); $db->next_record(); @@ -413,9 +367,8 @@ else } /* Get idcatart */ -if (0 != $idart && 0 != $idcat) -{ - $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($idcat)."'"; +if (0 != $idart && 0 != $idcat) { + $sql = "SELECT idcatart FROM " . $cfg["tab"]["cat_art"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "' AND idcat = '" . Contenido_Security::toInteger($idcat) . "'"; $db->query($sql); $db->next_record(); @@ -425,10 +378,9 @@ if (0 != $idart && 0 != $idcat) $idartlang = getArtLang($idart, $lang); -if ($idartlang === false) -{ +if ($idartlang === false) { header($errsite); - exit; + exit; } /* @@ -444,8 +396,6 @@ if ($cfg["cache"]["disable"] != '1') { $oCacheHandler->start($iStartTime); // $iStartTime ist optional und ist die startzeit des scriptes, z. b. am anfang von fron_content.php } // END: concache - - ############################################## # BACKEND / FRONTEND EDITING ############################################## @@ -460,44 +410,46 @@ if ($cfg["cache"]["disable"] != '1') { * The reason is to avoid cross-site scripting errors in the backend, if the backend domain differs from * the frontend domain. */ -if ($contenido) -{ +if ($contenido) { $perm->load_permissions(); /* Change mode edit / view */ - if (isset ($changeview)) - { + if (isset($changeview)) { $sess->register("view"); $view = $changeview; } $col = new InUseCollection; - if ($overrideid != "" && $overridetype != "") - { + if (!empty($overrideid) && !empty($overridetype)) { $col->removeItemMarks($overridetype, $overrideid); } /* Remove all own marks */ $col->removeSessionMarks($sess->id); /* If the override flag is set, override a specific InUseItem */ + if(empty($type)) { + $type = ''; + } + if(empty($typenr)) { + $typenr = ''; + } + - list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang"); + list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml'] . "external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang"); $sHtmlInUse = ''; $sHtmlInUseMessage = ''; - if ($inUse == true) - { + if ($inUse == true) { $disabled = 'disabled="disabled"'; - $sHtmlInUseCss = ''; + $sHtmlInUseCss = ''; $sHtmlInUseMessage = $message; } - $sql = "SELECT locked FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT locked FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); $locked = $db->f("locked"); - if ($locked == 1) - { + if ($locked == 1) { $inUse = true; $disabled = 'disabled="disabled"'; } @@ -505,47 +457,40 @@ if ($contenido) // CEC to check if the user has permission to edit articles in this category CEC_Hook::setBreakCondition(false, true); // break at "false", default value "true" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid'] + 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid'] ); - if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true) - { + if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true) { /* Create buttons for editing */ $edit_preview = ''; - if ($view == "edit") - { + if ($view == "edit") { $edit_preview = ''; - } - else - { + } else { $edit_preview = ''; } /* Display articles */ - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT idart, is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT idart, is_start FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' ORDER BY idart"; $db->query($sql); - } - else - { - $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + } else { + $sql = "SELECT idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' ORDER BY idart"; $db->query($sql); } @@ -554,53 +499,41 @@ if ($contenido) $edit_preview .= '
- Preview + Preview - Preview + Preview
- Preview + Preview - Edit + Edit
Articles in category:
'; - while ($db->next_record() && ($db->affected_rows() != 1)) - { + while ($db->next_record() && ($db->affected_rows() != 1)) { $class = "font-family:'Verdana'; font-size:10; color:#000000; text-decoration: underline; font-weight:normal"; - if (!isset ($idart)) - { - if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang)) - { + if (!isset($idart)) { + if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang)) { $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline ;font-weight:bold"; } - } - else - { - if ($idart == $db->f("idart")) - { + } else { + if ($idart == $db->f("idart")) { $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline; font-weight:bold"; } } - $edit_preview .= "url("front_content.php?idart=".$db->f("idart")."&idcat=$idcat")."\">$a "; - $a ++; + $edit_preview .= "url("front_content.php?idart=" . $db->f("idart") . "&idcat=$idcat") . "\">$a "; + $a++; } $edit_preview .= '
'; - } - } // end if $contenido /* If mode is 'edit' and user has permission to edit articles in the current category */ -if ($inUse == false && $allow == true && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat))) -{ +if (empty($inUse) && (isset($allow) && $allow == true) && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat))) { cInclude("includes", "functions.tpl.php"); cInclude("includes", "functions.con.php"); - include ($cfg["path"]["contenido"].$cfg["path"]["includes"]."include.con_editcontent.php"); -} -else -{ + include ($cfg["path"]["contenido"] . $cfg["path"]["includes"] . "include.con_editcontent.php"); +} else { ############################################## # FRONTEND VIEW ############################################## /* Mark submenuitem 'Preview' in the Contenido Backend (Area: Contenido --> Articles --> Preview) */ - if ($contenido) - { + if ($contenido) { $markscript = markSubMenuItem(4, true); } @@ -610,10 +543,10 @@ else $sql = "SELECT createcode FROM - ".$cfg["tab"]["cat_art"]." + " . $cfg["tab"]["cat_art"] . " WHERE - idcat = '".Contenido_Security::toInteger($idcat)."' AND - idart = '".Contenido_Security::toInteger($idart)."'"; + idcat = '" . Contenido_Security::toInteger($idcat) . "' AND + idart = '" . Contenido_Security::toInteger($idart) . "'"; $db->query($sql); $db->next_record(); @@ -623,47 +556,36 @@ else ############################################## /* Check if code is expired, create new code if needed */ - if ($db->f("createcode") == 0 && $force == 0) - { - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + if ($db->f("createcode") == 0 && $force == 0 && $cfg['dceModEdit']['use'] !== true && $cfg['dceLayEdit']['use'] !== true) { + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); - if ($db->num_rows() == 0) - { + if ($db->num_rows() == 0) { /* Include here for performance reasons */ cInclude("includes", "functions.tpl.php"); conGenerateCode($idcat, $idart, $lang, $client); - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); } - if ($db->next_record()) - { + if ($db->next_record()) { $code = stripslashes($db->f("code")); - } - else - { + } else { if ($contenido) $code = "echo \"No code available.\";"; - else - { - if ($error == 1) - { + else { + if ($error == 1) { echo "Fatal error: Could not display error page. Error to display was: 'No code available'"; - } - else - { + } else { header($errsite); - exit; + exit; } } } - } - else - { - $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + } else { + $sql = "DELETE FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); cInclude("includes", "functions.con.php"); @@ -672,7 +594,7 @@ else conGenerateCode($idcat, $idart, $lang, $client); - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); @@ -681,16 +603,18 @@ else } /* Add mark Script to code if user is in the backend */ + if(!empty($markscript)) { $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1); + } /* If article is in use, display notification */ - if ($sHtmlInUseCss && $sHtmlInUseMessage) { + if (!empty($sHtmlInUseCss) && !empty($sHtmlInUseMessage)) { $code = preg_replace("/<\/head>/i", "$sHtmlInUseCss\n", $code, 1); $code = preg_replace("/(]*)>/i", "\${1}> \n $sHtmlInUseMessage", $code, 1); } /* Check if category is public */ - $sql = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT public FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); @@ -700,80 +624,68 @@ else ############################################## # protected categories ############################################## - if ($public == 0) - { - if ($auth->auth["uid"] == "nobody") - { - $sql = "SELECT user_id, value FROM ".$cfg["tab"]["user_prop"]." WHERE type='frontend' and name='allowed_ip'"; + if ($public == 0) { + if ($auth->auth["uid"] == "nobody") { + $sql = "SELECT user_id, value FROM " . $cfg["tab"]["user_prop"] . " WHERE type='frontend' and name='allowed_ip'"; $db->query($sql); - while ($db->next_record()) - { + while ($db->next_record()) { $user_id = $db->f("user_id"); $range = urldecode($db->f("value")); $slash = strpos($range, "/"); - if ($slash == false) - { + if ($slash == false) { $netmask = "255.255.255.255"; $network = $range; - } - else - { + } else { $network = substr($range, 0, $slash); - $netmask = substr($range, $slash +1, strlen($range) - $slash -1); + $netmask = substr($range, $slash + 1, strlen($range) - $slash - 1); } - if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"])) - { + if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"])) { $sql = "SELECT idright - FROM ".$cfg["tab"]["rights"]." AS A, - ".$cfg["tab"]["actions"]." AS B, - ".$cfg["tab"]["area"]." AS C - WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '".Contenido_Security::escapeDB($user_id, $db2)."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."' + FROM " . $cfg["tab"]["rights"] . " AS A, + " . $cfg["tab"]["actions"] . " AS B, + " . $cfg["tab"]["area"] . " AS C + WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '" . Contenido_Security::escapeDB($user_id, $db2) . "' AND A.idcat = '" . Contenido_Security::toInteger($idcat) . "' AND A.idarea = C.idarea AND B.idaction = A.idaction"; $db2 = new DB_ConLite; $db2->query($sql); - if ($db2->num_rows() > 0) - { + if ($db2->num_rows() > 0) { $auth->auth["uid"] = $user_id; $validated = 1; } } } - if ($validated != 1) - { + if ($validated != 1) { // CEC to check category access CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] ); $auth->login_if(!$allow); } - } - else - { + } else { // CEC to check category access CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] ); /* - added 2008-11-18 Timo Trautmann - in backendeditmode also check if logged in backenduser has permission to view preview of page - */ + added 2008-11-18 Timo Trautmann + in backendeditmode also check if logged in backenduser has permission to view preview of page + */ if ($allow == false && $contenido && $perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat)) { $allow = true; } - if (!$allow) - { + if (!$allow) { header($errsite); - exit; + exit; } } } @@ -781,47 +693,24 @@ else ############################################## # statistic ############################################## - /* Sanity: If the statistic table doesn't contain an entry, create one */ - $sql = "SELECT idcatart FROM ".$cfg["tab"]["stat"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; - $db->query($sql); - - if ($db->next_record()) - { - /* Update the statistics. */ - $sql = "UPDATE ".$cfg["tab"]["stat"]." SET visited = visited + 1 WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idclient = '".Contenido_Security::toInteger($client)."' - AND idlang = '".Contenido_Security::toInteger($lang)."'"; - $db->query($sql); - } - else - { - /* Insert new record */ - $next = $db->nextid($cfg["tab"]["stat"]); - $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (visited, idcatart, idlang, idstat, idclient) VALUES ('1', '".Contenido_Security::toInteger($idcatart)."', '".Contenido_Security::toInteger($lang)."', - '".Contenido_Security::toInteger($next)."', '".Contenido_Security::toInteger($client)."')"; - $db->query($sql); - } + $oStatCol = new cApiStatCollection(); + $oStatCol->trackView($idcatart); /* * Check if an article is start article of the category */ - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT is_start FROM " . $cfg["tab"]["cat_art"] . " WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); $db->next_record(); $isstart = $db->f("is_start"); - } - else - { - $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT startidartlang FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); - if ($db->f("idartlang") == $idartlang) - { + if ($db->f("idartlang") == $idartlang) { $isstart = 1; - } - else - { + } else { $isstart = 0; } } @@ -829,18 +718,15 @@ else ############################################## # time management ############################################## - $sql = "SELECT timemgmt FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT timemgmt FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); - if (($db->f("timemgmt") == "1") && ($isstart != 1)) - { - $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."' + if (($db->f("timemgmt") == "1") && ($isstart != 1)) { + $sql = "SELECT online, redirect, redirect_url FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "' AND NOW() > datestart AND NOW() < dateend"; - } - else - { - $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT online, redirect, redirect_url FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; } $db->query($sql); @@ -850,15 +736,14 @@ else $redirect = $db->f("redirect"); $redirect_url = $db->f("redirect_url"); - @ eval ("\$"."redirect_url = \"$redirect_url\";"); // transform variables + @ eval("\$" . "redirect_url = \"$redirect_url\";"); // transform variables $insert_base = getEffectiveSetting('generator', 'basehref', "true"); /* * generate base url */ - if ($insert_base == "true") - { + if ($insert_base == "true") { $is_XHTML = getEffectiveSetting('generator', 'xhtml', "false"); $str_base_uri = $cfgClient[$client]["path"]["htmlpath"]; @@ -867,21 +752,19 @@ else $str_base_uri = CEC_Hook::executeAndReturn('Contenido.Frontend.BaseHrefGeneration', $str_base_uri); if ($is_XHTML == "true") { - $baseCode = ''; + $baseCode = ''; } else { - $baseCode = ''; + $baseCode = ''; } - $code = str_ireplace_once("", "\n".$baseCode, $code); + $code = str_ireplace_once("", "\n" . $baseCode, $code); } /* * Handle online (offline) articles */ - if ($online) - { - if ($redirect == '1' && $redirect_url != '') - { + if ($online) { + if ($redirect == '1' && $redirect_url != '') { page_close(); /* * Redirect to the URL defined in article properties @@ -897,12 +780,9 @@ else } header("Location: $redirect_url"); exit; - } - else - { - if ($cfg["debug"]["codeoutput"]) - { - echo ""; + } else { + if ($cfg["debug"]["codeoutput"]) { + echo ""; } /* @@ -913,40 +793,34 @@ else $aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', '')); if (in_array(Contenido_Security::toInteger($idart), $aExclude)) { - eval ("?>\n".$code."\n\n" . $code . "\n\n".$code."\n\n" . $code . "\n\n".$code."\n\n" . $code . "\n +$db->disconnect(); +page_close(); \ No newline at end of file diff --git a/conlite/external/bacon/bacon-qr-code/CHANGELOG.md b/conlite/external/bacon/bacon-qr-code/CHANGELOG.md deleted file mode 100644 index 619cb35..0000000 --- a/conlite/external/bacon/bacon-qr-code/CHANGELOG.md +++ /dev/null @@ -1,51 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 2.0.2 - 2020-07-30 - -### Changed - -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Upgrade phpunit. -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Allow tests in vendor bundles for Debian packaging. -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Update TravisCI config file. - -## 2.0.1 - 2020-07-14 - -### Fixed - -- [#69](https://github.com/Bacon/BaconQrCode/pull/69) SimpleCircleEye Class not working properly. - -## 2.0.0 - 2018-04-25 - -### Added - -- [#25](https://github.com/Bacon/BaconQrCode/pull/25) allows for setting a more compact text output - -- CHANGELOG.md added (how meta) - -- Allows more complex shapes for modules - -- Allows setting a gradient for the foreground - -- Allows transparent backgrounds and alpha channel on all colors - -### Changed - -- Minimum PHP version changed to 7.1 - -- Imagick renderer now allows setting different output formats - -- New optimized SVG renderer - -### Deprecated - -- Nothing. - -### Removed - -- Legacy ZF module support removed - -### Fixed - -- Non-release files are excluded from composer packages diff --git a/conlite/external/bacon/bacon-qr-code/LICENSE b/conlite/external/bacon/bacon-qr-code/LICENSE deleted file mode 100644 index d45a356..0000000 --- a/conlite/external/bacon/bacon-qr-code/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017, Ben Scholzen 'DASPRiD' -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/conlite/external/bacon/bacon-qr-code/README.md b/conlite/external/bacon/bacon-qr-code/README.md deleted file mode 100644 index ba006c1..0000000 --- a/conlite/external/bacon/bacon-qr-code/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# QR Code generator - -[![Build Status](https://api.travis-ci.org/Bacon/BaconQrCode.png?branch=master)](http://travis-ci.org/Bacon/BaconQrCode) -[![Coverage Status](https://coveralls.io/repos/github/Bacon/BaconQrCode/badge.svg?branch=master)](https://coveralls.io/github/Bacon/BaconQrCode?branch=master) -[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code) -[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code) -[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code) - - -## Introduction -BaconQrCode is a port of QR code portion of the ZXing library. It currently -only features the encoder part, but could later receive the decoder part as -well. - -As the Reed Solomon codec implementation of the ZXing library performs quite -slow in PHP, it was exchanged with the implementation by Phil Karn. - - -## Example usage -```php -use BaconQrCode\Renderer\ImageRenderer; -use BaconQrCode\Renderer\Image\ImagickImageBackEnd; -use BaconQrCode\Renderer\RendererStyle\RendererStyle; -use BaconQrCode\Writer; - -$renderer = new ImageRenderer( - new RendererStyle(400), - new ImagickImageBackEnd() -); -$writer = new Writer($renderer); -$writer->writeFile('Hello World!', 'qrcode.png'); -``` - -## Available image renderer back ends -BaconQrCode comes with multiple back ends for rendering images. Currently included are the following: - -- `ImagickImageBackEnd`: renders raster images using the Imagick library -- `SvgImageBackEnd`: renders SVG files using XMLWriter -- `EpsImageBackEnd`: renders EPS files diff --git a/conlite/external/bacon/bacon-qr-code/composer.json b/conlite/external/bacon/bacon-qr-code/composer.json deleted file mode 100644 index b240199..0000000 --- a/conlite/external/bacon/bacon-qr-code/composer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "bacon/bacon-qr-code", - "description": "BaconQrCode is a QR code generator for PHP.", - "license" : "BSD-2-Clause", - "homepage": "https://github.com/Bacon/BaconQrCode", - "require": { - "php": "^7.1 || ^8.0", - "ext-iconv": "*", - "dasprid/enum": "^1.0.3" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4", - "phly/keep-a-changelog": "^1.4" - } -} diff --git a/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist b/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist deleted file mode 100644 index 4d2f9cf..0000000 --- a/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./test - - - - - - src - - - diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php deleted file mode 100644 index 158384f..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php +++ /dev/null @@ -1,372 +0,0 @@ - - */ - private $bits; - - /** - * Size of the bit array in bits. - * - * @var int - */ - private $size; - - /** - * Creates a new bit array with a given size. - */ - public function __construct(int $size = 0) - { - $this->size = $size; - $this->bits = SplFixedArray::fromArray(array_fill(0, ($this->size + 31) >> 3, 0)); - } - - /** - * Gets the size in bits. - */ - public function getSize() : int - { - return $this->size; - } - - /** - * Gets the size in bytes. - */ - public function getSizeInBytes() : int - { - return ($this->size + 7) >> 3; - } - - /** - * Ensures that the array has a minimum capacity. - */ - public function ensureCapacity(int $size) : void - { - if ($size > count($this->bits) << 5) { - $this->bits->setSize(($size + 31) >> 5); - } - } - - /** - * Gets a specific bit. - */ - public function get(int $i) : bool - { - return 0 !== ($this->bits[$i >> 5] & (1 << ($i & 0x1f))); - } - - /** - * Sets a specific bit. - */ - public function set(int $i) : void - { - $this->bits[$i >> 5] = $this->bits[$i >> 5] | 1 << ($i & 0x1f); - } - - /** - * Flips a specific bit. - */ - public function flip(int $i) : void - { - $this->bits[$i >> 5] ^= 1 << ($i & 0x1f); - } - - /** - * Gets the next set bit position from a given position. - */ - public function getNextSet(int $from) : int - { - if ($from >= $this->size) { - return $this->size; - } - - $bitsOffset = $from >> 5; - $currentBits = $this->bits[$bitsOffset]; - $bitsLength = count($this->bits); - $currentBits &= ~((1 << ($from & 0x1f)) - 1); - - while (0 === $currentBits) { - if (++$bitsOffset === $bitsLength) { - return $this->size; - } - - $currentBits = $this->bits[$bitsOffset]; - } - - $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); - return $result > $this->size ? $this->size : $result; - } - - /** - * Gets the next unset bit position from a given position. - */ - public function getNextUnset(int $from) : int - { - if ($from >= $this->size) { - return $this->size; - } - - $bitsOffset = $from >> 5; - $currentBits = ~$this->bits[$bitsOffset]; - $bitsLength = count($this->bits); - $currentBits &= ~((1 << ($from & 0x1f)) - 1); - - while (0 === $currentBits) { - if (++$bitsOffset === $bitsLength) { - return $this->size; - } - - $currentBits = ~$this->bits[$bitsOffset]; - } - - $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); - return $result > $this->size ? $this->size : $result; - } - - /** - * Sets a bulk of bits. - */ - public function setBulk(int $i, int $newBits) : void - { - $this->bits[$i >> 5] = $newBits; - } - - /** - * Sets a range of bits. - * - * @throws InvalidArgumentException if end is smaller than start - */ - public function setRange(int $start, int $end) : void - { - if ($end < $start) { - throw new InvalidArgumentException('End must be greater or equal to start'); - } - - if ($end === $start) { - return; - } - - --$end; - - $firstInt = $start >> 5; - $lastInt = $end >> 5; - - for ($i = $firstInt; $i <= $lastInt; ++$i) { - $firstBit = $i > $firstInt ? 0 : $start & 0x1f; - $lastBit = $i < $lastInt ? 31 : $end & 0x1f; - - if (0 === $firstBit && 31 === $lastBit) { - $mask = 0x7fffffff; - } else { - $mask = 0; - - for ($j = $firstBit; $j < $lastBit; ++$j) { - $mask |= 1 << $j; - } - } - - $this->bits[$i] = $this->bits[$i] | $mask; - } - } - - /** - * Clears the bit array, unsetting every bit. - */ - public function clear() : void - { - $bitsLength = count($this->bits); - - for ($i = 0; $i < $bitsLength; ++$i) { - $this->bits[$i] = 0; - } - } - - /** - * Checks if a range of bits is set or not set. - - * @throws InvalidArgumentException if end is smaller than start - */ - public function isRange(int $start, int $end, bool $value) : bool - { - if ($end < $start) { - throw new InvalidArgumentException('End must be greater or equal to start'); - } - - if ($end === $start) { - return true; - } - - --$end; - - $firstInt = $start >> 5; - $lastInt = $end >> 5; - - for ($i = $firstInt; $i <= $lastInt; ++$i) { - $firstBit = $i > $firstInt ? 0 : $start & 0x1f; - $lastBit = $i < $lastInt ? 31 : $end & 0x1f; - - if (0 === $firstBit && 31 === $lastBit) { - $mask = 0x7fffffff; - } else { - $mask = 0; - - for ($j = $firstBit; $j <= $lastBit; ++$j) { - $mask |= 1 << $j; - } - } - - if (($this->bits[$i] & $mask) !== ($value ? $mask : 0)) { - return false; - } - } - - return true; - } - - /** - * Appends a bit to the array. - */ - public function appendBit(bool $bit) : void - { - $this->ensureCapacity($this->size + 1); - - if ($bit) { - $this->bits[$this->size >> 5] = $this->bits[$this->size >> 5] | (1 << ($this->size & 0x1f)); - } - - ++$this->size; - } - - /** - * Appends a number of bits (up to 32) to the array. - - * @throws InvalidArgumentException if num bits is not between 0 and 32 - */ - public function appendBits(int $value, int $numBits) : void - { - if ($numBits < 0 || $numBits > 32) { - throw new InvalidArgumentException('Num bits must be between 0 and 32'); - } - - $this->ensureCapacity($this->size + $numBits); - - for ($numBitsLeft = $numBits; $numBitsLeft > 0; $numBitsLeft--) { - $this->appendBit((($value >> ($numBitsLeft - 1)) & 0x01) === 1); - } - } - - /** - * Appends another bit array to this array. - */ - public function appendBitArray(self $other) : void - { - $otherSize = $other->getSize(); - $this->ensureCapacity($this->size + $other->getSize()); - - for ($i = 0; $i < $otherSize; ++$i) { - $this->appendBit($other->get($i)); - } - } - - /** - * Makes an exclusive-or comparision on the current bit array. - * - * @throws InvalidArgumentException if sizes don't match - */ - public function xorBits(self $other) : void - { - $bitsLength = count($this->bits); - $otherBits = $other->getBitArray(); - - if ($bitsLength !== count($otherBits)) { - throw new InvalidArgumentException('Sizes don\'t match'); - } - - for ($i = 0; $i < $bitsLength; ++$i) { - $this->bits[$i] = $this->bits[$i] ^ $otherBits[$i]; - } - } - - /** - * Converts the bit array to a byte array. - * - * @return SplFixedArray - */ - public function toBytes(int $bitOffset, int $numBytes) : SplFixedArray - { - $bytes = new SplFixedArray($numBytes); - - for ($i = 0; $i < $numBytes; ++$i) { - $byte = 0; - - for ($j = 0; $j < 8; ++$j) { - if ($this->get($bitOffset)) { - $byte |= 1 << (7 - $j); - } - - ++$bitOffset; - } - - $bytes[$i] = $byte; - } - - return $bytes; - } - - /** - * Gets the internal bit array. - * - * @return SplFixedArray - */ - public function getBitArray() : SplFixedArray - { - return $this->bits; - } - - /** - * Reverses the array. - */ - public function reverse() : void - { - $newBits = new SplFixedArray(count($this->bits)); - - for ($i = 0; $i < $this->size; ++$i) { - if ($this->get($this->size - $i - 1)) { - $newBits[$i >> 5] = $newBits[$i >> 5] | (1 << ($i & 0x1f)); - } - } - - $this->bits = $newBits; - } - - /** - * Returns a string representation of the bit array. - */ - public function __toString() : string - { - $result = ''; - - for ($i = 0; $i < $this->size; ++$i) { - if (0 === ($i & 0x07)) { - $result .= ' '; - } - - $result .= $this->get($i) ? 'X' : '.'; - } - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php deleted file mode 100644 index 10bf8fe..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php +++ /dev/null @@ -1,313 +0,0 @@ - - */ - private $bits; - - /** - * @throws InvalidArgumentException if a dimension is smaller than zero - */ - public function __construct(int $width, int $height = null) - { - if (null === $height) { - $height = $width; - } - - if ($width < 1 || $height < 1) { - throw new InvalidArgumentException('Both dimensions must be greater than zero'); - } - - $this->width = $width; - $this->height = $height; - $this->rowSize = ($width + 31) >> 5; - $this->bits = SplFixedArray::fromArray(array_fill(0, $this->rowSize * $height, 0)); - } - - /** - * Gets the requested bit, where true means black. - */ - public function get(int $x, int $y) : bool - { - $offset = $y * $this->rowSize + ($x >> 5); - return 0 !== (BitUtils::unsignedRightShift($this->bits[$offset], ($x & 0x1f)) & 1); - } - - /** - * Sets the given bit to true. - */ - public function set(int $x, int $y) : void - { - $offset = $y * $this->rowSize + ($x >> 5); - $this->bits[$offset] = $this->bits[$offset] | (1 << ($x & 0x1f)); - } - - /** - * Flips the given bit. - */ - public function flip(int $x, int $y) : void - { - $offset = $y * $this->rowSize + ($x >> 5); - $this->bits[$offset] = $this->bits[$offset] ^ (1 << ($x & 0x1f)); - } - - /** - * Clears all bits (set to false). - */ - public function clear() : void - { - $max = count($this->bits); - - for ($i = 0; $i < $max; ++$i) { - $this->bits[$i] = 0; - } - } - - /** - * Sets a square region of the bit matrix to true. - * - * @throws InvalidArgumentException if left or top are negative - * @throws InvalidArgumentException if width or height are smaller than 1 - * @throws InvalidArgumentException if region does not fit into the matix - */ - public function setRegion(int $left, int $top, int $width, int $height) : void - { - if ($top < 0 || $left < 0) { - throw new InvalidArgumentException('Left and top must be non-negative'); - } - - if ($height < 1 || $width < 1) { - throw new InvalidArgumentException('Width and height must be at least 1'); - } - - $right = $left + $width; - $bottom = $top + $height; - - if ($bottom > $this->height || $right > $this->width) { - throw new InvalidArgumentException('The region must fit inside the matrix'); - } - - for ($y = $top; $y < $bottom; ++$y) { - $offset = $y * $this->rowSize; - - for ($x = $left; $x < $right; ++$x) { - $index = $offset + ($x >> 5); - $this->bits[$index] = $this->bits[$index] | (1 << ($x & 0x1f)); - } - } - } - - /** - * A fast method to retrieve one row of data from the matrix as a BitArray. - */ - public function getRow(int $y, BitArray $row = null) : BitArray - { - if (null === $row || $row->getSize() < $this->width) { - $row = new BitArray($this->width); - } - - $offset = $y * $this->rowSize; - - for ($x = 0; $x < $this->rowSize; ++$x) { - $row->setBulk($x << 5, $this->bits[$offset + $x]); - } - - return $row; - } - - /** - * Sets a row of data from a BitArray. - */ - public function setRow(int $y, BitArray $row) : void - { - $bits = $row->getBitArray(); - - for ($i = 0; $i < $this->rowSize; ++$i) { - $this->bits[$y * $this->rowSize + $i] = $bits[$i]; - } - } - - /** - * This is useful in detecting the enclosing rectangle of a 'pure' barcode. - * - * @return int[]|null - */ - public function getEnclosingRectangle() : ?array - { - $left = $this->width; - $top = $this->height; - $right = -1; - $bottom = -1; - - for ($y = 0; $y < $this->height; ++$y) { - for ($x32 = 0; $x32 < $this->rowSize; ++$x32) { - $bits = $this->bits[$y * $this->rowSize + $x32]; - - if (0 !== $bits) { - if ($y < $top) { - $top = $y; - } - - if ($y > $bottom) { - $bottom = $y; - } - - if ($x32 * 32 < $left) { - $bit = 0; - - while (($bits << (31 - $bit)) === 0) { - $bit++; - } - - if (($x32 * 32 + $bit) < $left) { - $left = $x32 * 32 + $bit; - } - } - } - - if ($x32 * 32 + 31 > $right) { - $bit = 31; - - while (0 === BitUtils::unsignedRightShift($bits, $bit)) { - --$bit; - } - - if (($x32 * 32 + $bit) > $right) { - $right = $x32 * 32 + $bit; - } - } - } - } - - $width = $right - $left; - $height = $bottom - $top; - - if ($width < 0 || $height < 0) { - return null; - } - - return [$left, $top, $width, $height]; - } - - /** - * Gets the most top left set bit. - * - * This is useful in detecting a corner of a 'pure' barcode. - * - * @return int[]|null - */ - public function getTopLeftOnBit() : ?array - { - $bitsOffset = 0; - - while ($bitsOffset < count($this->bits) && 0 === $this->bits[$bitsOffset]) { - ++$bitsOffset; - } - - if (count($this->bits) === $bitsOffset) { - return null; - } - - $x = intdiv($bitsOffset, $this->rowSize); - $y = ($bitsOffset % $this->rowSize) << 5; - - $bits = $this->bits[$bitsOffset]; - $bit = 0; - - while (0 === ($bits << (31 - $bit))) { - ++$bit; - } - - $x += $bit; - - return [$x, $y]; - } - - /** - * Gets the most bottom right set bit. - * - * This is useful in detecting a corner of a 'pure' barcode. - * - * @return int[]|null - */ - public function getBottomRightOnBit() : ?array - { - $bitsOffset = count($this->bits) - 1; - - while ($bitsOffset >= 0 && 0 === $this->bits[$bitsOffset]) { - --$bitsOffset; - } - - if ($bitsOffset < 0) { - return null; - } - - $x = intdiv($bitsOffset, $this->rowSize); - $y = ($bitsOffset % $this->rowSize) << 5; - - $bits = $this->bits[$bitsOffset]; - $bit = 0; - - while (0 === BitUtils::unsignedRightShift($bits, $bit)) { - --$bit; - } - - $x += $bit; - - return [$x, $y]; - } - - /** - * Gets the width of the matrix, - */ - public function getWidth() : int - { - return $this->width; - } - - /** - * Gets the height of the matrix. - */ - public function getHeight() : int - { - return $this->height; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php deleted file mode 100644 index 0c575b4..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php +++ /dev/null @@ -1,41 +0,0 @@ ->>" in other - * languages. - */ - public static function unsignedRightShift(int $a, int $b) : int - { - return ( - $a >= 0 - ? $a >> $b - : (($a & 0x7fffffff) >> $b) | (0x40000000 >> ($b - 1)) - ); - } - - /** - * Gets the number of trailing zeros. - */ - public static function numberOfTrailingZeros(int $i) : int - { - $lastPos = strrpos(str_pad(decbin($i), 32, '0', STR_PAD_LEFT), '1'); - return $lastPos === false ? 32 : 31 - $lastPos; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php b/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php deleted file mode 100644 index 6dfff17..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php +++ /dev/null @@ -1,180 +0,0 @@ -|null - */ - private static $valueToEci; - - /** - * @var array|null - */ - private static $nameToEci; - - public function __construct(array $values, string ...$otherEncodingNames) - { - $this->values = $values; - $this->otherEncodingNames = $otherEncodingNames; - } - - /** - * Returns the primary value. - */ - public function getValue() : int - { - return $this->values[0]; - } - - /** - * Gets character set ECI by value. - * - * Returns the representing ECI of a given value, or null if it is legal but unsupported. - * - * @throws InvalidArgumentException if value is not between 0 and 900 - */ - public static function getCharacterSetEciByValue(int $value) : ?self - { - if ($value < 0 || $value >= 900) { - throw new InvalidArgumentException('Value must be between 0 and 900'); - } - - $valueToEci = self::valueToEci(); - - if (! array_key_exists($value, $valueToEci)) { - return null; - } - - return $valueToEci[$value]; - } - - /** - * Returns character set ECI by name. - * - * Returns the representing ECI of a given name, or null if it is legal but unsupported - */ - public static function getCharacterSetEciByName(string $name) : ?self - { - $nameToEci = self::nameToEci(); - $name = strtolower($name); - - if (! array_key_exists($name, $nameToEci)) { - return null; - } - - return $nameToEci[$name]; - } - - private static function valueToEci() : array - { - if (null !== self::$valueToEci) { - return self::$valueToEci; - } - - self::$valueToEci = []; - - foreach (self::values() as $eci) { - foreach ($eci->values as $value) { - self::$valueToEci[$value] = $eci; - } - } - - return self::$valueToEci; - } - - private static function nameToEci() : array - { - if (null !== self::$nameToEci) { - return self::$nameToEci; - } - - self::$nameToEci = []; - - foreach (self::values() as $eci) { - self::$nameToEci[strtolower($eci->name())] = $eci; - - foreach ($eci->otherEncodingNames as $name) { - self::$nameToEci[strtolower($name)] = $eci; - } - } - - return self::$nameToEci; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php b/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php deleted file mode 100644 index a9a1d07..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php +++ /dev/null @@ -1,49 +0,0 @@ -count = $count; - $this->dataCodewords = $dataCodewords; - } - - /** - * Returns how many times the block is used. - */ - public function getCount() : int - { - return $this->count; - } - - /** - * Returns the number of data codewords. - */ - public function getDataCodewords() : int - { - return $this->dataCodewords; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php b/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php deleted file mode 100644 index 172b5f2..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php +++ /dev/null @@ -1,74 +0,0 @@ -ecCodewordsPerBlock = $ecCodewordsPerBlock; - $this->ecBlocks = $ecBlocks; - } - - /** - * Returns the number of EC codewords per block. - */ - public function getEcCodewordsPerBlock() : int - { - return $this->ecCodewordsPerBlock; - } - - /** - * Returns the total number of EC block appearances. - */ - public function getNumBlocks() : int - { - $total = 0; - - foreach ($this->ecBlocks as $ecBlock) { - $total += $ecBlock->getCount(); - } - - return $total; - } - - /** - * Returns the total count of EC codewords. - */ - public function getTotalEcCodewords() : int - { - return $this->ecCodewordsPerBlock * $this->getNumBlocks(); - } - - /** - * Returns the EC blocks included in this collection. - * - * @return EcBlock[] - */ - public function getEcBlocks() : array - { - return $this->ecBlocks; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php b/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php deleted file mode 100644 index 9bbf440..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php +++ /dev/null @@ -1,63 +0,0 @@ -bits = $bits; - } - - /** - * @throws OutOfBoundsException if number of bits is invalid - */ - public static function forBits(int $bits) : self - { - switch ($bits) { - case 0: - return self::M(); - - case 1: - return self::L(); - - case 2: - return self::H(); - - case 3: - return self::Q(); - } - - throw new OutOfBoundsException('Invalid number of bits'); - } - - /** - * Returns the two bits used to encode this error correction level. - */ - public function getBits() : int - { - return $this->bits; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php b/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php deleted file mode 100644 index 53e3541..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php +++ /dev/null @@ -1,203 +0,0 @@ -ecLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x3); - $this->dataMask = $formatInfo & 0x7; - } - - /** - * Checks how many bits are different between two integers. - */ - public static function numBitsDiffering(int $a, int $b) : int - { - $a ^= $b; - - return ( - self::BITS_SET_IN_HALF_BYTE[$a & 0xf] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 4) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 8) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 12) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 16) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 20) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 24) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 28) & 0xf)] - ); - } - - /** - * Decodes format information. - */ - public static function decodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self - { - $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2); - - if (null !== $formatInfo) { - return $formatInfo; - } - - // Should return null, but, some QR codes apparently do not mask this info. Try again by actually masking the - // pattern first. - return self::doDecodeFormatInformation( - $maskedFormatInfo1 ^ self::FORMAT_INFO_MASK_QR, - $maskedFormatInfo2 ^ self::FORMAT_INFO_MASK_QR - ); - } - - /** - * Internal method for decoding format information. - */ - private static function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self - { - $bestDifference = PHP_INT_MAX; - $bestFormatInfo = 0; - - foreach (self::FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) { - $targetInfo = $decodeInfo[0]; - - if ($targetInfo === $maskedFormatInfo1 || $targetInfo === $maskedFormatInfo2) { - // Found an exact match - return new self($decodeInfo[1]); - } - - $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo); - - if ($bitsDifference < $bestDifference) { - $bestFormatInfo = $decodeInfo[1]; - $bestDifference = $bitsDifference; - } - - if ($maskedFormatInfo1 !== $maskedFormatInfo2) { - // Also try the other option - $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo); - - if ($bitsDifference < $bestDifference) { - $bestFormatInfo = $decodeInfo[1]; - $bestDifference = $bitsDifference; - } - } - } - - // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match. - if ($bestDifference <= 3) { - return new self($bestFormatInfo); - } - - return null; - } - - /** - * Returns the error correction level. - */ - public function getErrorCorrectionLevel() : ErrorCorrectionLevel - { - return $this->ecLevel; - } - - /** - * Returns the data mask. - */ - public function getDataMask() : int - { - return $this->dataMask; - } - - /** - * Hashes the code of the EC level. - */ - public function hashCode() : int - { - return ($this->ecLevel->getBits() << 3) | $this->dataMask; - } - - /** - * Verifies if this instance equals another one. - */ - public function equals(self $other) : bool - { - return ( - $this->ecLevel === $other->ecLevel - && $this->dataMask === $other->dataMask - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php b/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php deleted file mode 100644 index 51e6c9a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php +++ /dev/null @@ -1,76 +0,0 @@ -characterCountBitsForVersions = $characterCountBitsForVersions; - $this->bits = $bits; - } - - /** - * Returns the number of bits used in a specific QR code version. - */ - public function getCharacterCountBits(Version $version) : int - { - $number = $version->getVersionNumber(); - - if ($number <= 9) { - $offset = 0; - } elseif ($number <= 26) { - $offset = 1; - } else { - $offset = 2; - } - - return $this->characterCountBitsForVersions[$offset]; - } - - /** - * Returns the four bits used to encode this mode. - */ - public function getBits() : int - { - return $this->bits; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php b/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php deleted file mode 100644 index a5aad0b..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php +++ /dev/null @@ -1,468 +0,0 @@ - 8) { - throw new InvalidArgumentException('Symbol size must be between 0 and 8'); - } - - if ($firstRoot < 0 || $firstRoot >= (1 << $symbolSize)) { - throw new InvalidArgumentException('First root must be between 0 and ' . (1 << $symbolSize)); - } - - if ($numRoots < 0 || $numRoots >= (1 << $symbolSize)) { - throw new InvalidArgumentException('Num roots must be between 0 and ' . (1 << $symbolSize)); - } - - if ($padding < 0 || $padding >= ((1 << $symbolSize) - 1 - $numRoots)) { - throw new InvalidArgumentException( - 'Padding must be between 0 and ' . ((1 << $symbolSize) - 1 - $numRoots) - ); - } - - $this->symbolSize = $symbolSize; - $this->blockSize = (1 << $symbolSize) - 1; - $this->padding = $padding; - $this->alphaTo = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); - $this->indexOf = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); - - // Generate galous field lookup table - $this->indexOf[0] = $this->blockSize; - $this->alphaTo[$this->blockSize] = 0; - - $sr = 1; - - for ($i = 0; $i < $this->blockSize; ++$i) { - $this->indexOf[$sr] = $i; - $this->alphaTo[$i] = $sr; - - $sr <<= 1; - - if ($sr & (1 << $symbolSize)) { - $sr ^= $gfPoly; - } - - $sr &= $this->blockSize; - } - - if (1 !== $sr) { - throw new RuntimeException('Field generator polynomial is not primitive'); - } - - // Form RS code generator polynomial from its roots - $this->generatorPoly = SplFixedArray::fromArray(array_fill(0, $numRoots + 1, 0), false); - $this->firstRoot = $firstRoot; - $this->primitive = $primitive; - $this->numRoots = $numRoots; - - // Find prim-th root of 1, used in decoding - for ($iPrimitive = 1; ($iPrimitive % $primitive) !== 0; $iPrimitive += $this->blockSize) { - } - - $this->iPrimitive = intdiv($iPrimitive, $primitive); - - $this->generatorPoly[0] = 1; - - for ($i = 0, $root = $firstRoot * $primitive; $i < $numRoots; ++$i, $root += $primitive) { - $this->generatorPoly[$i + 1] = 1; - - for ($j = $i; $j > 0; $j--) { - if ($this->generatorPoly[$j] !== 0) { - $this->generatorPoly[$j] = $this->generatorPoly[$j - 1] ^ $this->alphaTo[ - $this->modNn($this->indexOf[$this->generatorPoly[$j]] + $root) - ]; - } else { - $this->generatorPoly[$j] = $this->generatorPoly[$j - 1]; - } - } - - $this->generatorPoly[$j] = $this->alphaTo[$this->modNn($this->indexOf[$this->generatorPoly[0]] + $root)]; - } - - // Convert generator poly to index form for quicker encoding - for ($i = 0; $i <= $numRoots; ++$i) { - $this->generatorPoly[$i] = $this->indexOf[$this->generatorPoly[$i]]; - } - } - - /** - * Encodes data and writes result back into parity array. - */ - public function encode(SplFixedArray $data, SplFixedArray $parity) : void - { - for ($i = 0; $i < $this->numRoots; ++$i) { - $parity[$i] = 0; - } - - $iterations = $this->blockSize - $this->numRoots - $this->padding; - - for ($i = 0; $i < $iterations; ++$i) { - $feedback = $this->indexOf[$data[$i] ^ $parity[0]]; - - if ($feedback !== $this->blockSize) { - // Feedback term is non-zero - $feedback = $this->modNn($this->blockSize - $this->generatorPoly[$this->numRoots] + $feedback); - - for ($j = 1; $j < $this->numRoots; ++$j) { - $parity[$j] = $parity[$j] ^ $this->alphaTo[ - $this->modNn($feedback + $this->generatorPoly[$this->numRoots - $j]) - ]; - } - } - - for ($j = 0; $j < $this->numRoots - 1; ++$j) { - $parity[$j] = $parity[$j + 1]; - } - - if ($feedback !== $this->blockSize) { - $parity[$this->numRoots - 1] = $this->alphaTo[$this->modNn($feedback + $this->generatorPoly[0])]; - } else { - $parity[$this->numRoots - 1] = 0; - } - } - } - - /** - * Decodes received data. - */ - public function decode(SplFixedArray $data, SplFixedArray $erasures = null) : ?int - { - // This speeds up the initialization a bit. - $numRootsPlusOne = SplFixedArray::fromArray(array_fill(0, $this->numRoots + 1, 0), false); - $numRoots = SplFixedArray::fromArray(array_fill(0, $this->numRoots, 0), false); - - $lambda = clone $numRootsPlusOne; - $b = clone $numRootsPlusOne; - $t = clone $numRootsPlusOne; - $omega = clone $numRootsPlusOne; - $root = clone $numRoots; - $loc = clone $numRoots; - - $numErasures = (null !== $erasures ? count($erasures) : 0); - - // Form the Syndromes; i.e., evaluate data(x) at roots of g(x) - $syndromes = SplFixedArray::fromArray(array_fill(0, $this->numRoots, $data[0]), false); - - for ($i = 1; $i < $this->blockSize - $this->padding; ++$i) { - for ($j = 0; $j < $this->numRoots; ++$j) { - if ($syndromes[$j] === 0) { - $syndromes[$j] = $data[$i]; - } else { - $syndromes[$j] = $data[$i] ^ $this->alphaTo[ - $this->modNn($this->indexOf[$syndromes[$j]] + ($this->firstRoot + $j) * $this->primitive) - ]; - } - } - } - - // Convert syndromes to index form, checking for nonzero conditions - $syndromeError = 0; - - for ($i = 0; $i < $this->numRoots; ++$i) { - $syndromeError |= $syndromes[$i]; - $syndromes[$i] = $this->indexOf[$syndromes[$i]]; - } - - if (! $syndromeError) { - // If syndrome is zero, data[] is a codeword and there are no errors to correct, so return data[] - // unmodified. - return 0; - } - - $lambda[0] = 1; - - if ($numErasures > 0) { - // Init lambda to be the erasure locator polynomial - $lambda[1] = $this->alphaTo[$this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[0]))]; - - for ($i = 1; $i < $numErasures; ++$i) { - $u = $this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[$i])); - - for ($j = $i + 1; $j > 0; --$j) { - $tmp = $this->indexOf[$lambda[$j - 1]]; - - if ($tmp !== $this->blockSize) { - $lambda[$j] = $lambda[$j] ^ $this->alphaTo[$this->modNn($u + $tmp)]; - } - } - } - } - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $b[$i] = $this->indexOf[$lambda[$i]]; - } - - // Begin Berlekamp-Massey algorithm to determine error+erasure locator polynomial - $r = $numErasures; - $el = $numErasures; - - while (++$r <= $this->numRoots) { - // Compute discrepancy at the r-th step in poly form - $discrepancyR = 0; - - for ($i = 0; $i < $r; ++$i) { - if ($lambda[$i] !== 0 && $syndromes[$r - $i - 1] !== $this->blockSize) { - $discrepancyR ^= $this->alphaTo[ - $this->modNn($this->indexOf[$lambda[$i]] + $syndromes[$r - $i - 1]) - ]; - } - } - - $discrepancyR = $this->indexOf[$discrepancyR]; - - if ($discrepancyR === $this->blockSize) { - $tmp = $b->toArray(); - array_unshift($tmp, $this->blockSize); - array_pop($tmp); - $b = SplFixedArray::fromArray($tmp, false); - continue; - } - - $t[0] = $lambda[0]; - - for ($i = 0; $i < $this->numRoots; ++$i) { - if ($b[$i] !== $this->blockSize) { - $t[$i + 1] = $lambda[$i + 1] ^ $this->alphaTo[$this->modNn($discrepancyR + $b[$i])]; - } else { - $t[$i + 1] = $lambda[$i + 1]; - } - } - - if (2 * $el <= $r + $numErasures - 1) { - $el = $r + $numErasures - $el; - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $b[$i] = ( - $lambda[$i] === 0 - ? $this->blockSize - : $this->modNn($this->indexOf[$lambda[$i]] - $discrepancyR + $this->blockSize) - ); - } - } else { - $tmp = $b->toArray(); - array_unshift($tmp, $this->blockSize); - array_pop($tmp); - $b = SplFixedArray::fromArray($tmp, false); - } - - $lambda = clone $t; - } - - // Convert lambda to index form and compute deg(lambda(x)) - $degLambda = 0; - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $lambda[$i] = $this->indexOf[$lambda[$i]]; - - if ($lambda[$i] !== $this->blockSize) { - $degLambda = $i; - } - } - - // Find roots of the error+erasure locator polynomial by Chien search. - $reg = clone $lambda; - $reg[0] = 0; - $count = 0; - $i = 1; - - for ($k = $this->iPrimitive - 1; $i <= $this->blockSize; ++$i, $k = $this->modNn($k + $this->iPrimitive)) { - $q = 1; - - for ($j = $degLambda; $j > 0; $j--) { - if ($reg[$j] !== $this->blockSize) { - $reg[$j] = $this->modNn($reg[$j] + $j); - $q ^= $this->alphaTo[$reg[$j]]; - } - } - - if ($q !== 0) { - // Not a root - continue; - } - - // Store root (index-form) and error location number - $root[$count] = $i; - $loc[$count] = $k; - - if (++$count === $degLambda) { - break; - } - } - - if ($degLambda !== $count) { - // deg(lambda) unequal to number of roots: uncorrectable error detected - return null; - } - - // Compute err+eras evaluate poly omega(x) = s(x)*lambda(x) (modulo x**numRoots). In index form. Also find - // deg(omega). - $degOmega = $degLambda - 1; - - for ($i = 0; $i <= $degOmega; ++$i) { - $tmp = 0; - - for ($j = $i; $j >= 0; --$j) { - if ($syndromes[$i - $j] !== $this->blockSize && $lambda[$j] !== $this->blockSize) { - $tmp ^= $this->alphaTo[$this->modNn($syndromes[$i - $j] + $lambda[$j])]; - } - } - - $omega[$i] = $this->indexOf[$tmp]; - } - - // Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = inv(X(l))**(firstRoot-1) and - // den = lambda_pr(inv(X(l))) all in poly form. - for ($j = $count - 1; $j >= 0; --$j) { - $num1 = 0; - - for ($i = $degOmega; $i >= 0; $i--) { - if ($omega[$i] !== $this->blockSize) { - $num1 ^= $this->alphaTo[$this->modNn($omega[$i] + $i * $root[$j])]; - } - } - - $num2 = $this->alphaTo[$this->modNn($root[$j] * ($this->firstRoot - 1) + $this->blockSize)]; - $den = 0; - - // lambda[i+1] for i even is the formal derivativelambda_pr of lambda[i] - for ($i = min($degLambda, $this->numRoots - 1) & ~1; $i >= 0; $i -= 2) { - if ($lambda[$i + 1] !== $this->blockSize) { - $den ^= $this->alphaTo[$this->modNn($lambda[$i + 1] + $i * $root[$j])]; - } - } - - // Apply error to data - if ($num1 !== 0 && $loc[$j] >= $this->padding) { - $data[$loc[$j] - $this->padding] = $data[$loc[$j] - $this->padding] ^ ( - $this->alphaTo[ - $this->modNn( - $this->indexOf[$num1] + $this->indexOf[$num2] + $this->blockSize - $this->indexOf[$den] - ) - ] - ); - } - } - - if (null !== $erasures) { - if (count($erasures) < $count) { - $erasures->setSize($count); - } - - for ($i = 0; $i < $count; $i++) { - $erasures[$i] = $loc[$i]; - } - } - - return $count; - } - - /** - * Computes $x % GF_SIZE, where GF_SIZE is 2**GF_BITS - 1, without a slow divide. - */ - private function modNn(int $x) : int - { - while ($x >= $this->blockSize) { - $x -= $this->blockSize; - $x = ($x >> $this->symbolSize) + ($x & $this->blockSize); - } - - return $x; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/Version.php b/conlite/external/bacon/bacon-qr-code/src/Common/Version.php deleted file mode 100644 index 917d048..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/Version.php +++ /dev/null @@ -1,596 +0,0 @@ -|null - */ - private static $versions; - - /** - * @param int[] $alignmentPatternCenters - */ - private function __construct( - int $versionNumber, - array $alignmentPatternCenters, - EcBlocks ...$ecBlocks - ) { - $this->versionNumber = $versionNumber; - $this->alignmentPatternCenters = $alignmentPatternCenters; - $this->ecBlocks = $ecBlocks; - - $totalCodewords = 0; - $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock(); - - foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) { - $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords); - } - - $this->totalCodewords = $totalCodewords; - } - - /** - * Returns the version number. - */ - public function getVersionNumber() : int - { - return $this->versionNumber; - } - - /** - * Returns the alignment pattern centers. - * - * @return int[] - */ - public function getAlignmentPatternCenters() : array - { - return $this->alignmentPatternCenters; - } - - /** - * Returns the total number of codewords. - */ - public function getTotalCodewords() : int - { - return $this->totalCodewords; - } - - /** - * Calculates the dimension for the current version. - */ - public function getDimensionForVersion() : int - { - return 17 + 4 * $this->versionNumber; - } - - /** - * Returns the number of EC blocks for a specific EC level. - */ - public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks - { - return $this->ecBlocks[$ecLevel->ordinal()]; - } - - /** - * Gets a provisional version number for a specific dimension. - * - * @throws InvalidArgumentException if dimension is not 1 mod 4 - */ - public static function getProvisionalVersionForDimension(int $dimension) : self - { - if (1 !== $dimension % 4) { - throw new InvalidArgumentException('Dimension is not 1 mod 4'); - } - - return self::getVersionForNumber(intdiv($dimension - 17, 4)); - } - - /** - * Gets a version instance for a specific version number. - * - * @throws InvalidArgumentException if version number is out of range - */ - public static function getVersionForNumber(int $versionNumber) : self - { - if ($versionNumber < 1 || $versionNumber > 40) { - throw new InvalidArgumentException('Version number must be between 1 and 40'); - } - - return self::versions()[$versionNumber - 1]; - } - - /** - * Decodes version information from an integer and returns the version. - */ - public static function decodeVersionInformation(int $versionBits) : ?self - { - $bestDifference = PHP_INT_MAX; - $bestVersion = 0; - - foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) { - if ($targetVersion === $versionBits) { - return self::getVersionForNumber($i + 7); - } - - $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion); - - if ($bitsDifference < $bestDifference) { - $bestVersion = $i + 7; - $bestDifference = $bitsDifference; - } - } - - if ($bestDifference <= 3) { - return self::getVersionForNumber($bestVersion); - } - - return null; - } - - /** - * Builds the function pattern for the current version. - */ - public function buildFunctionPattern() : BitMatrix - { - $dimension = $this->getDimensionForVersion(); - $bitMatrix = new BitMatrix($dimension); - - // Top left finder pattern + separator + format - $bitMatrix->setRegion(0, 0, 9, 9); - // Top right finder pattern + separator + format - $bitMatrix->setRegion($dimension - 8, 0, 8, 9); - // Bottom left finder pattern + separator + format - $bitMatrix->setRegion(0, $dimension - 8, 9, 8); - - // Alignment patterns - $max = count($this->alignmentPatternCenters); - - for ($x = 0; $x < $max; ++$x) { - $i = $this->alignmentPatternCenters[$x] - 2; - - for ($y = 0; $y < $max; ++$y) { - if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) { - // No alignment patterns near the three finder paterns - continue; - } - - $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5); - } - } - - // Vertical timing pattern - $bitMatrix->setRegion(6, 9, 1, $dimension - 17); - // Horizontal timing pattern - $bitMatrix->setRegion(9, 6, $dimension - 17, 1); - - if ($this->versionNumber > 6) { - // Version info, top right - $bitMatrix->setRegion($dimension - 11, 0, 3, 6); - // Version info, bottom left - $bitMatrix->setRegion(0, $dimension - 11, 6, 3); - } - - return $bitMatrix; - } - - /** - * Returns a string representation for the version. - */ - public function __toString() : string - { - return (string) $this->versionNumber; - } - - /** - * Build and cache a specific version. - * - * See ISO 18004:2006 6.5.1 Table 9. - * - * @return array - */ - private static function versions() : array - { - if (null !== self::$versions) { - return self::$versions; - } - - return self::$versions = [ - new self( - 1, - [], - new EcBlocks(7, new EcBlock(1, 19)), - new EcBlocks(10, new EcBlock(1, 16)), - new EcBlocks(13, new EcBlock(1, 13)), - new EcBlocks(17, new EcBlock(1, 9)) - ), - new self( - 2, - [6, 18], - new EcBlocks(10, new EcBlock(1, 34)), - new EcBlocks(16, new EcBlock(1, 28)), - new EcBlocks(22, new EcBlock(1, 22)), - new EcBlocks(28, new EcBlock(1, 16)) - ), - new self( - 3, - [6, 22], - new EcBlocks(15, new EcBlock(1, 55)), - new EcBlocks(26, new EcBlock(1, 44)), - new EcBlocks(18, new EcBlock(2, 17)), - new EcBlocks(22, new EcBlock(2, 13)) - ), - new self( - 4, - [6, 26], - new EcBlocks(20, new EcBlock(1, 80)), - new EcBlocks(18, new EcBlock(2, 32)), - new EcBlocks(26, new EcBlock(3, 24)), - new EcBlocks(16, new EcBlock(4, 9)) - ), - new self( - 5, - [6, 30], - new EcBlocks(26, new EcBlock(1, 108)), - new EcBlocks(24, new EcBlock(2, 43)), - new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)), - new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12)) - ), - new self( - 6, - [6, 34], - new EcBlocks(18, new EcBlock(2, 68)), - new EcBlocks(16, new EcBlock(4, 27)), - new EcBlocks(24, new EcBlock(4, 19)), - new EcBlocks(28, new EcBlock(4, 15)) - ), - new self( - 7, - [6, 22, 38], - new EcBlocks(20, new EcBlock(2, 78)), - new EcBlocks(18, new EcBlock(4, 31)), - new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)), - new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14)) - ), - new self( - 8, - [6, 24, 42], - new EcBlocks(24, new EcBlock(2, 97)), - new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)), - new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)), - new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15)) - ), - new self( - 9, - [6, 26, 46], - new EcBlocks(30, new EcBlock(2, 116)), - new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)), - new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)), - new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13)) - ), - new self( - 10, - [6, 28, 50], - new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)), - new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)), - new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)), - new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16)) - ), - new self( - 11, - [6, 30, 54], - new EcBlocks(20, new EcBlock(4, 81)), - new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)), - new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)), - new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13)) - ), - new self( - 12, - [6, 32, 58], - new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)), - new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)), - new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)), - new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15)) - ), - new self( - 13, - [6, 34, 62], - new EcBlocks(26, new EcBlock(4, 107)), - new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)), - new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)), - new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12)) - ), - new self( - 14, - [6, 26, 46, 66], - new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)), - new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)), - new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)), - new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13)) - ), - new self( - 15, - [6, 26, 48, 70], - new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)), - new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)), - new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)), - new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13)) - ), - new self( - 16, - [6, 26, 50, 74], - new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)), - new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)), - new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)), - new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16)) - ), - new self( - 17, - [6, 30, 54, 78], - new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)), - new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)), - new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)), - new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15)) - ), - new self( - 18, - [6, 30, 56, 82], - new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)), - new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)), - new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)), - new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15)) - ), - new self( - 19, - [6, 30, 58, 86], - new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)), - new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)), - new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)), - new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14)) - ), - new self( - 20, - [6, 34, 62, 90], - new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)), - new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)), - new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)), - new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16)) - ), - new self( - 21, - [6, 28, 50, 72, 94], - new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)), - new EcBlocks(26, new EcBlock(17, 42)), - new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)), - new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17)) - ), - new self( - 22, - [6, 26, 50, 74, 98], - new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)), - new EcBlocks(28, new EcBlock(17, 46)), - new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)), - new EcBlocks(24, new EcBlock(34, 13)) - ), - new self( - 23, - [6, 30, 54, 78, 102], - new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)), - new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)), - new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16)) - ), - new self( - 24, - [6, 28, 54, 80, 106], - new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)), - new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)), - new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)), - new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17)) - ), - new self( - 25, - [6, 32, 58, 84, 110], - new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)), - new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)), - new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)), - new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16)) - ), - new self( - 26, - [6, 30, 58, 86, 114], - new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)), - new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)), - new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)), - new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17)) - ), - new self( - 27, - [6, 34, 62, 90, 118], - new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)), - new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)), - new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)), - new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16)) - ), - new self( - 28, - [6, 26, 50, 74, 98, 122], - new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)), - new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)), - new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)), - new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16)) - ), - new self( - 29, - [6, 30, 54, 78, 102, 126], - new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)), - new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)), - new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)), - new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16)) - ), - new self( - 30, - [6, 26, 52, 78, 104, 130], - new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)), - new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)), - new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)), - new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16)) - ), - new self( - 31, - [6, 30, 56, 82, 108, 134], - new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)), - new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)), - new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)), - new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16)) - ), - new self( - 32, - [6, 34, 60, 86, 112, 138], - new EcBlocks(30, new EcBlock(17, 115)), - new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)), - new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)), - new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16)) - ), - new self( - 33, - [6, 30, 58, 86, 114, 142], - new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)), - new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)), - new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)), - new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16)) - ), - new self( - 34, - [6, 34, 62, 90, 118, 146], - new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)), - new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)), - new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)), - new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17)) - ), - new self( - 35, - [6, 30, 54, 78, 102, 126, 150], - new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)), - new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)), - new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16)) - ), - new self( - 36, - [6, 24, 50, 76, 102, 128, 154], - new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)), - new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)), - new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)), - new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16)) - ), - new self( - 37, - [6, 28, 54, 80, 106, 132, 158], - new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)), - new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)), - new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)), - new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16)) - ), - new self( - 38, - [6, 32, 58, 84, 110, 136, 162], - new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)), - new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)), - new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16)) - ), - new self( - 39, - [6, 26, 54, 82, 110, 138, 166], - new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)), - new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)), - new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)), - new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16)) - ), - new self( - 40, - [6, 30, 58, 86, 114, 142, 170], - new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)), - new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)), - new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)), - new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16)) - ), - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php deleted file mode 100644 index be54afa..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php +++ /dev/null @@ -1,58 +0,0 @@ - - */ - private $dataBytes; - - /** - * Error correction bytes in the block. - * - * @var SplFixedArray - */ - private $errorCorrectionBytes; - - /** - * Creates a new block pair. - * - * @param SplFixedArray $data - * @param SplFixedArray $errorCorrection - */ - public function __construct(SplFixedArray $data, SplFixedArray $errorCorrection) - { - $this->dataBytes = $data; - $this->errorCorrectionBytes = $errorCorrection; - } - - /** - * Gets the data bytes. - * - * @return SplFixedArray - */ - public function getDataBytes() : SplFixedArray - { - return $this->dataBytes; - } - - /** - * Gets the error correction bytes. - * - * @return SplFixedArray - */ - public function getErrorCorrectionBytes() : SplFixedArray - { - return $this->errorCorrectionBytes; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php deleted file mode 100644 index b58cc0a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php +++ /dev/null @@ -1,150 +0,0 @@ -> - */ - private $bytes; - - /** - * Width of the matrix. - * - * @var int - */ - private $width; - - /** - * Height of the matrix. - * - * @var int - */ - private $height; - - public function __construct(int $width, int $height) - { - $this->height = $height; - $this->width = $width; - $this->bytes = new SplFixedArray($height); - - for ($y = 0; $y < $height; ++$y) { - $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0)); - } - } - - /** - * Gets the width of the matrix. - */ - public function getWidth() : int - { - return $this->width; - } - - /** - * Gets the height of the matrix. - */ - public function getHeight() : int - { - return $this->height; - } - - /** - * Gets the internal representation of the matrix. - * - * @return SplFixedArray> - */ - public function getArray() : SplFixedArray - { - return $this->bytes; - } - - /** - * @return Traversable - */ - public function getBytes() : Traversable - { - foreach ($this->bytes as $row) { - foreach ($row as $byte) { - yield $byte; - } - } - } - - /** - * Gets the byte for a specific position. - */ - public function get(int $x, int $y) : int - { - return $this->bytes[$y][$x]; - } - - /** - * Sets the byte for a specific position. - */ - public function set(int $x, int $y, int $value) : void - { - $this->bytes[$y][$x] = $value; - } - - /** - * Clears the matrix with a specific value. - */ - public function clear(int $value) : void - { - for ($y = 0; $y < $this->height; ++$y) { - for ($x = 0; $x < $this->width; ++$x) { - $this->bytes[$y][$x] = $value; - } - } - } - - public function __clone() - { - $this->bytes = clone $this->bytes; - - foreach ($this->bytes as $index => $row) { - $this->bytes[$index] = clone $row; - } - } - - /** - * Returns a string representation of the matrix. - */ - public function __toString() : string - { - $result = ''; - - for ($y = 0; $y < $this->height; $y++) { - for ($x = 0; $x < $this->width; $x++) { - switch ($this->bytes[$y][$x]) { - case 0: - $result .= ' 0'; - break; - - case 1: - $result .= ' 1'; - break; - - default: - $result .= ' '; - break; - } - } - - $result .= "\n"; - } - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php deleted file mode 100644 index 4345f57..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php +++ /dev/null @@ -1,652 +0,0 @@ -getSize() - + $mode->getCharacterCountBits(Version::getVersionForNumber(1)) - + $dataBits->getSize(); - $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel); - - // Use that guess to calculate the right version. I am still not sure - // this works in 100% of cases. - $bitsNeeded = $headerBits->getSize() - + $mode->getCharacterCountBits($provisionalVersion) - + $dataBits->getSize(); - $version = self::chooseVersion($bitsNeeded, $ecLevel); - - $headerAndDataBits = new BitArray(); - $headerAndDataBits->appendBitArray($headerBits); - - // Find "length" of main segment and write it. - $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content)); - self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits); - - // Put data together into the overall payload. - $headerAndDataBits->appendBitArray($dataBits); - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords(); - - // Terminate the bits properly. - self::terminateBits($numDataBytes, $headerAndDataBits); - - // Interleave data bits with error correction code. - $finalBits = self::interleaveWithEcBytes( - $headerAndDataBits, - $version->getTotalCodewords(), - $numDataBytes, - $ecBlocks->getNumBlocks() - ); - - // Choose the mask pattern. - $dimension = $version->getDimensionForVersion(); - $matrix = new ByteMatrix($dimension, $dimension); - $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix); - - // Build the matrix. - MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix); - - return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix); - } - - /** - * Gets the alphanumeric code for a byte. - */ - private static function getAlphanumericCode(int $code) : int - { - if (isset(self::ALPHANUMERIC_TABLE[$code])) { - return self::ALPHANUMERIC_TABLE[$code]; - } - - return -1; - } - - /** - * Chooses the best mode for a given content. - */ - private static function chooseMode(string $content, string $encoding = null) : Mode - { - if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) { - return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE(); - } - - $hasNumeric = false; - $hasAlphanumeric = false; - $contentLength = strlen($content); - - for ($i = 0; $i < $contentLength; ++$i) { - $char = $content[$i]; - - if (ctype_digit($char)) { - $hasNumeric = true; - } elseif (-1 !== self::getAlphanumericCode(ord($char))) { - $hasAlphanumeric = true; - } else { - return Mode::BYTE(); - } - } - - if ($hasAlphanumeric) { - return Mode::ALPHANUMERIC(); - } elseif ($hasNumeric) { - return Mode::NUMERIC(); - } - - return Mode::BYTE(); - } - - /** - * Calculates the mask penalty for a matrix. - */ - private static function calculateMaskPenalty(ByteMatrix $matrix) : int - { - return ( - MaskUtil::applyMaskPenaltyRule1($matrix) - + MaskUtil::applyMaskPenaltyRule2($matrix) - + MaskUtil::applyMaskPenaltyRule3($matrix) - + MaskUtil::applyMaskPenaltyRule4($matrix) - ); - } - - /** - * Checks if content only consists of double-byte kanji characters. - */ - private static function isOnlyDoubleByteKanji(string $content) : bool - { - $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); - - if (false === $bytes) { - return false; - } - - $length = strlen($bytes); - - if (0 !== $length % 2) { - return false; - } - - for ($i = 0; $i < $length; $i += 2) { - $byte = $bytes[$i] & 0xff; - - if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) { - return false; - } - } - - return true; - } - - /** - * Chooses the best mask pattern for a matrix. - */ - private static function chooseMaskPattern( - BitArray $bits, - ErrorCorrectionLevel $ecLevel, - Version $version, - ByteMatrix $matrix - ) : int { - $minPenalty = PHP_INT_MAX; - $bestMaskPattern = -1; - - for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) { - MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix); - $penalty = self::calculateMaskPenalty($matrix); - - if ($penalty < $minPenalty) { - $minPenalty = $penalty; - $bestMaskPattern = $maskPattern; - } - } - - return $bestMaskPattern; - } - - /** - * Chooses the best version for the input. - * - * @throws WriterException if data is too big - */ - private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version - { - for ($versionNum = 1; $versionNum <= 40; ++$versionNum) { - $version = Version::getVersionForNumber($versionNum); - $numBytes = $version->getTotalCodewords(); - - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numEcBytes = $ecBlocks->getTotalEcCodewords(); - - $numDataBytes = $numBytes - $numEcBytes; - $totalInputBytes = intdiv($numInputBits + 8, 8); - - if ($numDataBytes >= $totalInputBytes) { - return $version; - } - } - - throw new WriterException('Data too big'); - } - - /** - * Terminates the bits in a bit array. - * - * @throws WriterException if data bits cannot fit in the QR code - * @throws WriterException if bits size does not equal the capacity - */ - private static function terminateBits(int $numDataBytes, BitArray $bits) : void - { - $capacity = $numDataBytes << 3; - - if ($bits->getSize() > $capacity) { - throw new WriterException('Data bits cannot fit in the QR code'); - } - - for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) { - $bits->appendBit(false); - } - - $numBitsInLastByte = $bits->getSize() & 0x7; - - if ($numBitsInLastByte > 0) { - for ($i = $numBitsInLastByte; $i < 8; ++$i) { - $bits->appendBit(false); - } - } - - $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes(); - - for ($i = 0; $i < $numPaddingBytes; ++$i) { - $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8); - } - - if ($bits->getSize() !== $capacity) { - throw new WriterException('Bits size does not equal capacity'); - } - } - - /** - * Gets number of data- and EC bytes for a block ID. - * - * @return int[] - * @throws WriterException if block ID is too large - * @throws WriterException if EC bytes mismatch - * @throws WriterException if RS blocks mismatch - * @throws WriterException if total bytes mismatch - */ - private static function getNumDataBytesAndNumEcBytesForBlockId( - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks, - int $blockId - ) : array { - if ($blockId >= $numRsBlocks) { - throw new WriterException('Block ID too large'); - } - - $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks; - $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2; - $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks); - $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1; - $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks); - $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1; - $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1; - $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2; - - if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) { - throw new WriterException('EC bytes mismatch'); - } - - if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) { - throw new WriterException('RS blocks mismatch'); - } - - if ($numTotalBytes !== - (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1) - + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2) - ) { - throw new WriterException('Total bytes mismatch'); - } - - if ($blockId < $numRsBlocksInGroup1) { - return [$numDataBytesInGroup1, $numEcBytesInGroup1]; - } else { - return [$numDataBytesInGroup2, $numEcBytesInGroup2]; - } - } - - /** - * Interleaves data with EC bytes. - * - * @throws WriterException if number of bits and data bytes does not match - * @throws WriterException if data bytes does not match offset - * @throws WriterException if an interleaving error occurs - */ - private static function interleaveWithEcBytes( - BitArray $bits, - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks - ) : BitArray { - if ($bits->getSizeInBytes() !== $numDataBytes) { - throw new WriterException('Number of bits and data bytes does not match'); - } - - $dataBytesOffset = 0; - $maxNumDataBytes = 0; - $maxNumEcBytes = 0; - - $blocks = new SplFixedArray($numRsBlocks); - - for ($i = 0; $i < $numRsBlocks; ++$i) { - list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId( - $numTotalBytes, - $numDataBytes, - $numRsBlocks, - $i - ); - - $size = $numDataBytesInBlock; - $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size); - $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock); - $blocks[$i] = new BlockPair($dataBytes, $ecBytes); - - $maxNumDataBytes = max($maxNumDataBytes, $size); - $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes)); - $dataBytesOffset += $numDataBytesInBlock; - } - - if ($numDataBytes !== $dataBytesOffset) { - throw new WriterException('Data bytes does not match offset'); - } - - $result = new BitArray(); - - for ($i = 0; $i < $maxNumDataBytes; ++$i) { - foreach ($blocks as $block) { - $dataBytes = $block->getDataBytes(); - - if ($i < count($dataBytes)) { - $result->appendBits($dataBytes[$i], 8); - } - } - } - - for ($i = 0; $i < $maxNumEcBytes; ++$i) { - foreach ($blocks as $block) { - $ecBytes = $block->getErrorCorrectionBytes(); - - if ($i < count($ecBytes)) { - $result->appendBits($ecBytes[$i], 8); - } - } - } - - if ($numTotalBytes !== $result->getSizeInBytes()) { - throw new WriterException( - 'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ' - ); - } - - return $result; - } - - /** - * Generates EC bytes for given data. - * - * @param SplFixedArray $dataBytes - * @return SplFixedArray - */ - private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray - { - $numDataBytes = count($dataBytes); - $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock); - - for ($i = 0; $i < $numDataBytes; $i++) { - $toEncode[$i] = $dataBytes[$i] & 0xff; - } - - $ecBytes = new SplFixedArray($numEcBytesInBlock); - $codec = self::getCodec($numDataBytes, $numEcBytesInBlock); - $codec->encode($toEncode, $ecBytes); - - return $ecBytes; - } - - /** - * Gets an RS codec and caches it. - */ - private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec - { - $cacheId = $numDataBytes . '-' . $numEcBytesInBlock; - - if (isset(self::$codecs[$cacheId])) { - return self::$codecs[$cacheId]; - } - - return self::$codecs[$cacheId] = new ReedSolomonCodec( - 8, - 0x11d, - 0, - 1, - $numEcBytesInBlock, - 255 - $numDataBytes - $numEcBytesInBlock - ); - } - - /** - * Appends mode information to a bit array. - */ - private static function appendModeInfo(Mode $mode, BitArray $bits) : void - { - $bits->appendBits($mode->getBits(), 4); - } - - /** - * Appends length information to a bit array. - * - * @throws WriterException if num letters is bigger than expected - */ - private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void - { - $numBits = $mode->getCharacterCountBits($version); - - if ($numLetters >= (1 << $numBits)) { - throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1)); - } - - $bits->appendBits($numLetters, $numBits); - } - - /** - * Appends bytes to a bit array in a specific mode. - * - * @throws WriterException if an invalid mode was supplied - */ - private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void - { - switch ($mode) { - case Mode::NUMERIC(): - self::appendNumericBytes($content, $bits); - break; - - case Mode::ALPHANUMERIC(): - self::appendAlphanumericBytes($content, $bits); - break; - - case Mode::BYTE(): - self::append8BitBytes($content, $bits, $encoding); - break; - - case Mode::KANJI(): - self::appendKanjiBytes($content, $bits); - break; - - default: - throw new WriterException('Invalid mode: ' . $mode); - } - } - - /** - * Appends numeric bytes to a bit array. - */ - private static function appendNumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $num1 = (int) $content[$i]; - - if ($i + 2 < $length) { - // Encode three numeric letters in ten bits. - $num2 = (int) $content[$i + 1]; - $num3 = (int) $content[$i + 2]; - $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10); - $i += 3; - } elseif ($i + 1 < $length) { - // Encode two numeric letters in seven bits. - $num2 = (int) $content[$i + 1]; - $bits->appendBits($num1 * 10 + $num2, 7); - $i += 2; - } else { - // Encode one numeric letter in four bits. - $bits->appendBits($num1, 4); - ++$i; - } - } - } - - /** - * Appends alpha-numeric bytes to a bit array. - * - * @throws WriterException if an invalid alphanumeric code was found - */ - private static function appendAlphanumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $code1 = self::getAlphanumericCode(ord($content[$i])); - - if (-1 === $code1) { - throw new WriterException('Invalid alphanumeric code'); - } - - if ($i + 1 < $length) { - $code2 = self::getAlphanumericCode(ord($content[$i + 1])); - - if (-1 === $code2) { - throw new WriterException('Invalid alphanumeric code'); - } - - // Encode two alphanumeric letters in 11 bits. - $bits->appendBits($code1 * 45 + $code2, 11); - $i += 2; - } else { - // Encode one alphanumeric letter in six bits. - $bits->appendBits($code1, 6); - ++$i; - } - } - } - - /** - * Appends regular 8-bit bytes to a bit array. - * - * @throws WriterException if content cannot be encoded to target encoding - */ - private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void - { - $bytes = @iconv('utf-8', $encoding, $content); - - if (false === $bytes) { - throw new WriterException('Could not encode content to ' . $encoding); - } - - $length = strlen($bytes); - - for ($i = 0; $i < $length; $i++) { - $bits->appendBits(ord($bytes[$i]), 8); - } - } - - /** - * Appends KANJI bytes to a bit array. - * - * @throws WriterException if content does not seem to be encoded in SHIFT-JIS - * @throws WriterException if an invalid byte sequence occurs - */ - private static function appendKanjiBytes(string $content, BitArray $bits) : void - { - if (strlen($content) % 2 > 0) { - // We just do a simple length check here. The for loop will check - // individual characters. - throw new WriterException('Content does not seem to be encoded in SHIFT-JIS'); - } - - $length = strlen($content); - - for ($i = 0; $i < $length; $i += 2) { - $byte1 = ord($content[$i]) & 0xff; - $byte2 = ord($content[$i + 1]) & 0xff; - $code = ($byte1 << 8) | $byte2; - - if ($code >= 0x8140 && $code <= 0x9ffc) { - $subtracted = $code - 0x8140; - } elseif ($code >= 0xe040 && $code <= 0xebbf) { - $subtracted = $code - 0xc140; - } else { - throw new WriterException('Invalid byte sequence'); - } - - $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff); - - $bits->appendBits($encoded, 13); - } - } - - /** - * Appends ECI information to a bit array. - */ - private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void - { - $mode = Mode::ECI(); - $bits->appendBits($mode->getBits(), 4); - $bits->appendBits($eci->getValue(), 8); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php deleted file mode 100644 index ba97dfb..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php +++ /dev/null @@ -1,271 +0,0 @@ -getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height - 1; ++$y) { - for ($x = 0; $x < $width - 1; ++$x) { - $value = $array[$y][$x]; - - if ($value === $array[$y][$x + 1] - && $value === $array[$y + 1][$x] - && $value === $array[$y + 1][$x + 1] - ) { - ++$penalty; - } - } - } - - return self::N2 * $penalty; - } - - /** - * Applies mask penalty rule 3 and returns the penalty. - * - * Finds consecutive cells of 00001011101 or 10111010000, and gives penalty - * to them. If we find patterns like 000010111010000, we give penalties - * twice (i.e. 40 * 2). - */ - public static function applyMaskPenaltyRule3(ByteMatrix $matrix) : int - { - $penalty = 0; - $array = $matrix->getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height; ++$y) { - for ($x = 0; $x < $width; ++$x) { - if ($x + 6 < $width - && 1 === $array[$y][$x] - && 0 === $array[$y][$x + 1] - && 1 === $array[$y][$x + 2] - && 1 === $array[$y][$x + 3] - && 1 === $array[$y][$x + 4] - && 0 === $array[$y][$x + 5] - && 1 === $array[$y][$x + 6] - && ( - ( - $x + 10 < $width - && 0 === $array[$y][$x + 7] - && 0 === $array[$y][$x + 8] - && 0 === $array[$y][$x + 9] - && 0 === $array[$y][$x + 10] - ) - || ( - $x - 4 >= 0 - && 0 === $array[$y][$x - 1] - && 0 === $array[$y][$x - 2] - && 0 === $array[$y][$x - 3] - && 0 === $array[$y][$x - 4] - ) - ) - ) { - $penalty += self::N3; - } - - if ($y + 6 < $height - && 1 === $array[$y][$x] - && 0 === $array[$y + 1][$x] - && 1 === $array[$y + 2][$x] - && 1 === $array[$y + 3][$x] - && 1 === $array[$y + 4][$x] - && 0 === $array[$y + 5][$x] - && 1 === $array[$y + 6][$x] - && ( - ( - $y + 10 < $height - && 0 === $array[$y + 7][$x] - && 0 === $array[$y + 8][$x] - && 0 === $array[$y + 9][$x] - && 0 === $array[$y + 10][$x] - ) - || ( - $y - 4 >= 0 - && 0 === $array[$y - 1][$x] - && 0 === $array[$y - 2][$x] - && 0 === $array[$y - 3][$x] - && 0 === $array[$y - 4][$x] - ) - ) - ) { - $penalty += self::N3; - } - } - } - - return $penalty; - } - - /** - * Applies mask penalty rule 4 and returns the penalty. - * - * Calculates the ratio of dark cells and gives penalty if the ratio is far - * from 50%. It gives 10 penalty for 5% distance. - */ - public static function applyMaskPenaltyRule4(ByteMatrix $matrix) : int - { - $numDarkCells = 0; - - $array = $matrix->getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height; ++$y) { - $arrayY = $array[$y]; - - for ($x = 0; $x < $width; ++$x) { - if (1 === $arrayY[$x]) { - ++$numDarkCells; - } - } - } - - $numTotalCells = $height * $width; - $darkRatio = $numDarkCells / $numTotalCells; - $fixedPercentVariances = (int) (abs($darkRatio - 0.5) * 20); - - return $fixedPercentVariances * self::N4; - } - - /** - * Returns the mask bit for "getMaskPattern" at "x" and "y". - * - * See 8.8 of JISX0510:2004 for mask pattern conditions. - * - * @throws InvalidArgumentException if an invalid mask pattern was supplied - */ - public static function getDataMaskBit(int $maskPattern, int $x, int $y) : bool - { - switch ($maskPattern) { - case 0: - $intermediate = ($y + $x) & 0x1; - break; - - case 1: - $intermediate = $y & 0x1; - break; - - case 2: - $intermediate = $x % 3; - break; - - case 3: - $intermediate = ($y + $x) % 3; - break; - - case 4: - $intermediate = (BitUtils::unsignedRightShift($y, 1) + (int) ($x / 3)) & 0x1; - break; - - case 5: - $temp = $y * $x; - $intermediate = ($temp & 0x1) + ($temp % 3); - break; - - case 6: - $temp = $y * $x; - $intermediate = (($temp & 0x1) + ($temp % 3)) & 0x1; - break; - - case 7: - $temp = $y * $x; - $intermediate = (($temp % 3) + (($y + $x) & 0x1)) & 0x1; - break; - - default: - throw new InvalidArgumentException('Invalid mask pattern: ' . $maskPattern); - } - - return 0 == $intermediate; - } - - /** - * Helper function for applyMaskPenaltyRule1. - * - * We need this for doing this calculation in both vertical and horizontal - * orders respectively. - */ - private static function applyMaskPenaltyRule1Internal(ByteMatrix $matrix, bool $isHorizontal) : int - { - $penalty = 0; - $iLimit = $isHorizontal ? $matrix->getHeight() : $matrix->getWidth(); - $jLimit = $isHorizontal ? $matrix->getWidth() : $matrix->getHeight(); - $array = $matrix->getArray(); - - for ($i = 0; $i < $iLimit; ++$i) { - $numSameBitCells = 0; - $prevBit = -1; - - for ($j = 0; $j < $jLimit; $j++) { - $bit = $isHorizontal ? $array[$i][$j] : $array[$j][$i]; - - if ($bit === $prevBit) { - ++$numSameBitCells; - } else { - if ($numSameBitCells >= 5) { - $penalty += self::N1 + ($numSameBitCells - 5); - } - - $numSameBitCells = 1; - $prevBit = $bit; - } - } - - if ($numSameBitCells >= 5) { - $penalty += self::N1 + ($numSameBitCells - 5); - } - } - - return $penalty; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php deleted file mode 100644 index 0967e29..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php +++ /dev/null @@ -1,513 +0,0 @@ -clear(-1); - } - - /** - * Builds a complete matrix. - */ - public static function buildMatrix( - BitArray $dataBits, - ErrorCorrectionLevel $level, - Version $version, - int $maskPattern, - ByteMatrix $matrix - ) : void { - self::clearMatrix($matrix); - self::embedBasicPatterns($version, $matrix); - self::embedTypeInfo($level, $maskPattern, $matrix); - self::maybeEmbedVersionInfo($version, $matrix); - self::embedDataBits($dataBits, $maskPattern, $matrix); - } - - /** - * Removes the position detection patterns from a matrix. - * - * This can be useful if you need to render those patterns separately. - */ - public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::removePositionDetectionPattern(0, 0, $matrix); - self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - } - - /** - * Embeds type information into a matrix. - */ - private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void - { - $typeInfoBits = new BitArray(); - self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits); - - $typeInfoBitsSize = $typeInfoBits->getSize(); - - for ($i = 0; $i < $typeInfoBitsSize; ++$i) { - $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i); - - $x1 = self::TYPE_INFO_COORDINATES[$i][0]; - $y1 = self::TYPE_INFO_COORDINATES[$i][1]; - - $matrix->set($x1, $y1, (int) $bit); - - if ($i < 8) { - $x2 = $matrix->getWidth() - $i - 1; - $y2 = 8; - } else { - $x2 = 8; - $y2 = $matrix->getHeight() - 7 + ($i - 8); - } - - $matrix->set($x2, $y2, (int) $bit); - } - } - - /** - * Generates type information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void - { - $typeInfo = ($level->getBits() << 3) | $maskPattern; - $bits->appendBits($typeInfo, 5); - - $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY); - $bits->appendBits($bchCode, 10); - - $maskBits = new BitArray(); - $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15); - $bits->xorBits($maskBits); - - if (15 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Embeds version information if required. - */ - private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 7) { - return; - } - - $versionInfoBits = new BitArray(); - self::makeVersionInfoBits($version, $versionInfoBits); - - $bitIndex = 6 * 3 - 1; - - for ($i = 0; $i < 6; ++$i) { - for ($j = 0; $j < 3; ++$j) { - $bit = $versionInfoBits->get($bitIndex); - --$bitIndex; - - $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit); - $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit); - } - } - } - - /** - * Generates version information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeVersionInfoBits(Version $version, BitArray $bits) : void - { - $bits->appendBits($version->getVersionNumber(), 6); - - $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY); - $bits->appendBits($bchCode, 12); - - if (18 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Calculates the BCH code for a value and a polynomial. - */ - private static function calculateBchCode(int $value, int $poly) : int - { - $msbSetInPoly = self::findMsbSet($poly); - $value <<= $msbSetInPoly - 1; - - while (self::findMsbSet($value) >= $msbSetInPoly) { - $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly); - } - - return $value; - } - - /** - * Finds and MSB set. - */ - private static function findMsbSet(int $value) : int - { - $numDigits = 0; - - while (0 !== $value) { - $value >>= 1; - ++$numDigits; - } - - return $numDigits; - } - - /** - * Embeds basic patterns into a matrix. - */ - private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void - { - self::embedPositionDetectionPatternsAndSeparators($matrix); - self::embedDarkDotAtLeftBottomCorner($matrix); - self::maybeEmbedPositionAdjustmentPatterns($version, $matrix); - self::embedTimingPatterns($matrix); - } - - /** - * Embeds position detection patterns and separators into a byte matrix. - */ - private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::embedPositionDetectionPattern(0, 0, $matrix); - self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - - $hspWidth = 8; - - self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix); - - $vspSize = 7; - - self::embedVerticalSeparationPattern($vspSize, 0, $matrix); - self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix); - self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix); - } - - /** - * Embeds a single position detection pattern into a byte matrix. - */ - private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]); - } - } - } - - private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, 0); - } - } - } - - /** - * Embeds a single horizontal separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($x = 0; $x < 8; $x++) { - if (-1 !== $matrix->get($xStart + $x, $yStart)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart + $x, $yStart, 0); - } - } - - /** - * Embeds a single vertical separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; $y++) { - if (-1 !== $matrix->get($xStart, $yStart + $y)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart, $yStart + $y, 0); - } - } - - /** - * Embeds a dot at the left bottom corner. - * - * @throws RuntimeException if a byte was already set to 0 - */ - private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void - { - if (0 === $matrix->get(8, $matrix->getHeight() - 8)) { - throw new RuntimeException('Byte already set to 0'); - } - - $matrix->set(8, $matrix->getHeight() - 8, 1); - } - - /** - * Embeds position adjustment patterns if required. - */ - private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 2) { - return; - } - - $index = $version->getVersionNumber() - 1; - - $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index]; - $numCoordinates = count($coordinates); - - for ($i = 0; $i < $numCoordinates; ++$i) { - for ($j = 0; $j < $numCoordinates; ++$j) { - $y = $coordinates[$i]; - $x = $coordinates[$j]; - - if (null === $x || null === $y) { - continue; - } - - if (-1 === $matrix->get($x, $y)) { - self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix); - } - } - } - } - - /** - * Embeds a single position adjustment pattern. - */ - private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 5; $y++) { - for ($x = 0; $x < 5; $x++) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]); - } - } - } - - /** - * Embeds timing patterns into a matrix. - */ - private static function embedTimingPatterns(ByteMatrix $matrix) : void - { - $matrixWidth = $matrix->getWidth(); - - for ($i = 8; $i < $matrixWidth - 8; ++$i) { - $bit = ($i + 1) % 2; - - if (-1 === $matrix->get($i, 6)) { - $matrix->set($i, 6, $bit); - } - - if (-1 === $matrix->get(6, $i)) { - $matrix->set(6, $i, $bit); - } - } - } - - /** - * Embeds "dataBits" using "getMaskPattern". - * - * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for - * how to embed data bits. - * - * @throws WriterException if not all bits could be consumed - */ - private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void - { - $bitIndex = 0; - $direction = -1; - - // Start from the right bottom cell. - $x = $matrix->getWidth() - 1; - $y = $matrix->getHeight() - 1; - - while ($x > 0) { - // Skip vertical timing pattern. - if (6 === $x) { - --$x; - } - - while ($y >= 0 && $y < $matrix->getHeight()) { - for ($i = 0; $i < 2; $i++) { - $xx = $x - $i; - - // Skip the cell if it's not empty. - if (-1 !== $matrix->get($xx, $y)) { - continue; - } - - if ($bitIndex < $dataBits->getSize()) { - $bit = $dataBits->get($bitIndex); - ++$bitIndex; - } else { - // Padding bit. If there is no bit left, we'll fill the - // left cells with 0, as described in 8.4.9 of - // JISX0510:2004 (p. 24). - $bit = false; - } - - // Skip masking if maskPattern is -1. - if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) { - $bit = ! $bit; - } - - $matrix->set($xx, $y, (int) $bit); - } - - $y += $direction; - } - - $direction = -$direction; - $y += $direction; - $x -= 2; - } - - // All bits should be consumed - if ($dataBits->getSize() !== $bitIndex) { - throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')'); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php deleted file mode 100644 index f568e88..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php +++ /dev/null @@ -1,141 +0,0 @@ -mode = $mode; - $this->errorCorrectionLevel = $errorCorrectionLevel; - $this->version = $version; - $this->maskPattern = $maskPattern; - $this->matrix = $matrix; - } - - /** - * Gets the mode. - */ - public function getMode() : Mode - { - return $this->mode; - } - - /** - * Gets the EC level. - */ - public function getErrorCorrectionLevel() : ErrorCorrectionLevel - { - return $this->errorCorrectionLevel; - } - - /** - * Gets the version. - */ - public function getVersion() : Version - { - return $this->version; - } - - /** - * Gets the mask pattern. - */ - public function getMaskPattern() : int - { - return $this->maskPattern; - } - - /** - * Gets the matrix. - * - * @return ByteMatrix - */ - public function getMatrix() - { - return $this->matrix; - } - - /** - * Validates whether a mask pattern is valid. - */ - public static function isValidMaskPattern(int $maskPattern) : bool - { - return $maskPattern > 0 && $maskPattern < self::NUM_MASK_PATTERNS; - } - - /** - * Returns a string representation of the QR code. - */ - public function __toString() : string - { - $result = "<<\n" - . ' mode: ' . $this->mode . "\n" - . ' ecLevel: ' . $this->errorCorrectionLevel . "\n" - . ' version: ' . $this->version . "\n" - . ' maskPattern: ' . $this->maskPattern . "\n"; - - if ($this->matrix === null) { - $result .= " matrix: null\n"; - } else { - $result .= " matrix:\n"; - $result .= $this->matrix; - } - - $result .= ">>\n"; - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php b/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php deleted file mode 100644 index 6f70c20..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Alpha must be between 0 and 100'); - } - - $this->alpha = $alpha; - $this->baseColor = $baseColor; - } - - public function getAlpha() : int - { - return $this->alpha; - } - - public function getBaseColor() : ColorInterface - { - return $this->baseColor; - } - - public function toRgb() : Rgb - { - return $this->baseColor->toRgb(); - } - - public function toCmyk() : Cmyk - { - return $this->baseColor->toCmyk(); - } - - public function toGray() : Gray - { - return $this->baseColor->toGray(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php deleted file mode 100644 index d6de390..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php +++ /dev/null @@ -1,103 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100'); - } - - if ($magenta < 0 || $magenta > 100) { - throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100'); - } - - if ($yellow < 0 || $yellow > 100) { - throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100'); - } - - if ($black < 0 || $black > 100) { - throw new Exception\InvalidArgumentException('Black must be between 0 and 100'); - } - - $this->cyan = $cyan; - $this->magenta = $magenta; - $this->yellow = $yellow; - $this->black = $black; - } - - public function getCyan() : int - { - return $this->cyan; - } - - public function getMagenta() : int - { - return $this->magenta; - } - - public function getYellow() : int - { - return $this->yellow; - } - - public function getBlack() : int - { - return $this->black; - } - - public function toRgb() : Rgb - { - $k = $this->black / 100; - $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100; - $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100; - $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100; - - return new Rgb( - (int) (-$c * 255 + 255), - (int) (-$m * 255 + 255), - (int) (-$y * 255 + 255) - ); - } - - public function toCmyk() : Cmyk - { - return $this; - } - - public function toGray() : Gray - { - return $this->toRgb()->toGray(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php deleted file mode 100644 index b50d1ca..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Gray must be between 0 and 100'); - } - - $this->gray = (int) $gray; - } - - public function getGray() : int - { - return $this->gray; - } - - public function toRgb() : Rgb - { - return new Rgb((int) ($this->gray * 2.55), (int) ($this->gray * 2.55), (int) ($this->gray * 2.55)); - } - - public function toCmyk() : Cmyk - { - return new Cmyk(0, 0, 0, 100 - $this->gray); - } - - public function toGray() : Gray - { - return $this; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php deleted file mode 100644 index 7935406..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php +++ /dev/null @@ -1,88 +0,0 @@ - 255) { - throw new Exception\InvalidArgumentException('Red must be between 0 and 255'); - } - - if ($green < 0 || $green > 255) { - throw new Exception\InvalidArgumentException('Green must be between 0 and 255'); - } - - if ($blue < 0 || $blue > 255) { - throw new Exception\InvalidArgumentException('Blue must be between 0 and 255'); - } - - $this->red = $red; - $this->green = $green; - $this->blue = $blue; - } - - public function getRed() : int - { - return $this->red; - } - - public function getGreen() : int - { - return $this->green; - } - - public function getBlue() : int - { - return $this->blue; - } - - public function toRgb() : Rgb - { - return $this; - } - - public function toCmyk() : Cmyk - { - $c = 1 - ($this->red / 255); - $m = 1 - ($this->green / 255); - $y = 1 - ($this->blue / 255); - $k = min($c, $m, $y); - - return new Cmyk( - (int) (100 * ($c - $k) / (1 - $k)), - (int) (100 * ($m - $k) / (1 - $k)), - (int) (100 * ($y - $k) / (1 - $k)), - (int) (100 * $k) - ); - } - - public function toGray() : Gray - { - return new Gray((int) (($this->red * 0.21 + $this->green * 0.71 + $this->blue * 0.07) / 2.55)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php deleted file mode 100644 index a3e1909..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php +++ /dev/null @@ -1,38 +0,0 @@ -externalEye = $externalEye; - $this->internalEye = $internalEye; - } - - public function getExternalPath() : Path - { - return $this->externalEye->getExternalPath(); - } - - public function getInternalPath() : Path - { - return $this->externalEye->getInternalPath(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php deleted file mode 100644 index ab68f3c..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -module = $module; - } - - public function getExternalPath() : Path - { - $matrix = new ByteMatrix(7, 7); - - for ($x = 0; $x < 7; ++$x) { - $matrix->set($x, 0, 1); - $matrix->set($x, 6, 1); - } - - for ($y = 1; $y < 6; ++$y) { - $matrix->set(0, $y, 1); - $matrix->set(6, $y, 1); - } - - return $this->module->createPath($matrix)->translate(-3.5, -3.5); - } - - public function getInternalPath() : Path - { - $matrix = new ByteMatrix(3, 3); - - for ($x = 0; $x < 3; ++$x) { - for ($y = 0; $y < 3; ++$y) { - $matrix->set($x, $y, 1); - } - } - - return $this->module->createPath($matrix)->translate(-1.5, -1.5); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php deleted file mode 100644 index 64d54ee..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php +++ /dev/null @@ -1,54 +0,0 @@ -move(-3.5, -3.5) - ->line(3.5, -3.5) - ->line(3.5, 3.5) - ->line(-3.5, 3.5) - ->close() - ->move(-2.5, -2.5) - ->line(-2.5, 2.5) - ->line(2.5, 2.5) - ->line(2.5, -2.5) - ->close() - ; - } - - public function getInternalPath() : Path - { - return (new Path()) - ->move(1.5, 0) - ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5) - ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.) - ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5) - ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.) - ->close() - ; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php deleted file mode 100644 index a3892b4..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php +++ /dev/null @@ -1,53 +0,0 @@ -move(-3.5, -3.5) - ->line(3.5, -3.5) - ->line(3.5, 3.5) - ->line(-3.5, 3.5) - ->close() - ->move(-2.5, -2.5) - ->line(-2.5, 2.5) - ->line(2.5, 2.5) - ->line(2.5, -2.5) - ->close() - ; - } - - public function getInternalPath() : Path - { - return (new Path()) - ->move(-1.5, -1.5) - ->line(1.5, -1.5) - ->line(1.5, 1.5) - ->line(-1.5, 1.5) - ->close() - ; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php deleted file mode 100644 index b581b54..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php +++ /dev/null @@ -1,376 +0,0 @@ -eps = "%!PS-Adobe-3.0 EPSF-3.0\n" - . "%%Creator: BaconQrCode\n" - . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size) - . "%%BeginProlog\n" - . "save\n" - . "50 dict begin\n" - . "/q { gsave } bind def\n" - . "/Q { grestore } bind def\n" - . "/s { scale } bind def\n" - . "/t { translate } bind def\n" - . "/r { rotate } bind def\n" - . "/n { newpath } bind def\n" - . "/m { moveto } bind def\n" - . "/l { lineto } bind def\n" - . "/c { curveto } bind def\n" - . "/z { closepath } bind def\n" - . "/f { eofill } bind def\n" - . "/rgb { setrgbcolor } bind def\n" - . "/cmyk { setcmykcolor } bind def\n" - . "/gray { setgray } bind def\n" - . "%%EndProlog\n" - . "1 -1 s\n" - . sprintf("0 -%d t\n", $size); - - if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) { - return; - } - - $this->eps .= wordwrap( - '0 0 m' - . sprintf(' %s 0 l', (string) $size) - . sprintf(' %s %s l', (string) $size, (string) $size) - . sprintf(' 0 %s l', (string) $size) - . ' z' - . ' ' .$this->getColorSetString($backgroundColor) . " f\n", - 75, - "\n " - ); - } - - public function scale(float $size) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION)); - } - - public function translate(float $x, float $y) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION)); - } - - public function rotate(int $degrees) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%d r\n", $degrees); - } - - public function push() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "q\n"; - } - - public function pop() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "Q\n"; - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'n ' - . $this->drawPathOperations($path, $fromX, $fromY) - . ' ' . $this->getColorSetString($color) . " f\n", - 75, - "\n " - ); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n", - 75, - "\n " - ); - - $this->createGradientFill($gradient, $x, $y, $width, $height); - } - - public function done() : string - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "%%TRAILER\nend restore\n%%EOF"; - $blob = $this->eps; - $this->eps = null; - - return $blob; - } - - private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string - { - $pathData = []; - - foreach ($ops as $op) { - switch (true) { - case $op instanceof Move: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s m', $toX, $toY); - break; - - case $op instanceof Line: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s l', $toX, $toY); - break; - - case $op instanceof EllipticArc: - $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY); - break; - - case $op instanceof Curve: - $x1 = round($op->getX1(), self::PRECISION); - $y1 = round($op->getY1(), self::PRECISION); - $x2 = round($op->getX2(), self::PRECISION); - $y2 = round($op->getY2(), self::PRECISION); - $fromX = $x3 = round($op->getX3(), self::PRECISION); - $fromY = $y3 = round($op->getY3(), self::PRECISION); - $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3); - break; - - case $op instanceof Close: - $pathData[] = 'z'; - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - return implode(' ', $pathData); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void - { - $startColor = $gradient->getStartColor(); - $endColor = $gradient->getEndColor(); - - if ($startColor instanceof Alpha) { - $startColor = $startColor->getBaseColor(); - } - - $startColorType = get_class($startColor); - - if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) { - $startColorType = Cmyk::class; - $startColor = $startColor->toCmyk(); - } - - if (get_class($endColor) !== $startColorType) { - switch ($startColorType) { - case Cmyk::class: - $endColor = $endColor->toCmyk(); - break; - - case Rgb::class: - $endColor = $endColor->toRgb(); - break; - - case Gray::class: - $endColor = $endColor->toGray(); - break; - } - } - - $this->eps .= "eoclip\n<<\n"; - - if ($gradient->getType() === GradientType::RADIAL()) { - $this->eps .= " /ShadingType 3\n"; - } else { - $this->eps .= " /ShadingType 2\n"; - } - - $this->eps .= " /Extend [ true true ]\n" - . " /AntiAlias true\n"; - - switch ($startColorType) { - case Cmyk::class: - $this->eps .= " /ColorSpace /DeviceCMYK\n"; - break; - - case Rgb::class: - $this->eps .= " /ColorSpace /DeviceRGB\n"; - break; - - case Gray::class: - $this->eps .= " /ColorSpace /DeviceGray\n"; - break; - } - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::VERTICAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::INVERSE_DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y + $height, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::RADIAL(): - $centerX = ($x + $width) / 2; - $centerY = ($y + $height) / 2; - - $this->eps .= sprintf( - " /Coords [ %s %s 0 %s %s %s ]\n", - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round(max($width, $height) / 2, self::PRECISION) - ); - break; - } - - $this->eps .= " /Function\n" - . " <<\n" - . " /FunctionType 2\n" - . " /Domain [ 0 1 ]\n" - . sprintf(" /C0 [ %s ]\n", $this->getColorString($startColor)) - . sprintf(" /C1 [ %s ]\n", $this->getColorString($endColor)) - . " /N 1\n" - . " >>\n>>\nshfill\nQ\n"; - } - - private function getColorSetString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return $this->getColorString($color) . ' rgb'; - } - - if ($color instanceof Cmyk) { - return $this->getColorString($color) . ' cmyk'; - } - - if ($color instanceof Gray) { - return $this->getColorString($color) . ' gray'; - } - - return $this->getColorSetString($color->toCmyk()); - } - - private function getColorString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255); - } - - if ($color instanceof Cmyk) { - return sprintf( - '%s %s %s %s', - $color->getCyan() / 100, - $color->getMagenta() / 100, - $color->getYellow() / 100, - $color->getBlack() / 100 - ); - } - - if ($color instanceof Gray) { - return sprintf('%s', $color->getGray() / 100); - } - - return $this->getColorString($color->toCmyk()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php deleted file mode 100644 index 0935819..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php +++ /dev/null @@ -1,87 +0,0 @@ -imageFormat = $imageFormat; - $this->compressionQuality = $compressionQuality; - } - - public function new(int $size, ColorInterface $backgroundColor) : void - { - $this->image = new Imagick(); - $this->image->newImage($size, $size, $this->getColorPixel($backgroundColor)); - $this->image->setImageFormat($this->imageFormat); - $this->image->setCompressionQuality($this->compressionQuality); - $this->draw = new ImagickDraw(); - $this->gradientCount = 0; - $this->matrices = [new TransformationMatrix()]; - $this->matrixIndex = 0; - } - - public function scale(float $size) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->scale($size, $size); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::scale($size)); - } - - public function translate(float $x, float $y) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->translate($x, $y); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::translate($x, $y)); - } - - public function rotate(int $degrees) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->rotate($degrees); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::rotate($degrees)); - } - - public function push() : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->push(); - $this->matrices[++$this->matrixIndex] = $this->matrices[$this->matrixIndex - 1]; - } - - public function pop() : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->pop(); - unset($this->matrices[$this->matrixIndex--]); - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->setFillColor($this->getColorPixel($color)); - $this->drawPath($path); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->setFillPatternURL('#' . $this->createGradientFill($gradient, $x, $y, $width, $height)); - $this->drawPath($path); - } - - public function done() : string - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->image->drawImage($this->draw); - $blob = $this->image->getImageBlob(); - $this->draw->clear(); - $this->image->clear(); - $this->draw = null; - $this->image = null; - $this->gradientCount = null; - - return $blob; - } - - private function drawPath(Path $path) : void - { - $this->draw->pathStart(); - - foreach ($path as $op) { - switch (true) { - case $op instanceof Move: - $this->draw->pathMoveToAbsolute($op->getX(), $op->getY()); - break; - - case $op instanceof Line: - $this->draw->pathLineToAbsolute($op->getX(), $op->getY()); - break; - - case $op instanceof EllipticArc: - $this->draw->pathEllipticArcAbsolute( - $op->getXRadius(), - $op->getYRadius(), - $op->getXAxisAngle(), - $op->isLargeArc(), - $op->isSweep(), - $op->getX(), - $op->getY() - ); - break; - - case $op instanceof Curve: - $this->draw->pathCurveToAbsolute( - $op->getX1(), - $op->getY1(), - $op->getX2(), - $op->getY2(), - $op->getX3(), - $op->getY3() - ); - break; - - case $op instanceof Close: - $this->draw->pathClose(); - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - $this->draw->pathFinish(); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string - { - list($width, $height) = $this->matrices[$this->matrixIndex]->apply($x + $width, $y + $height); - list($x, $y) = $this->matrices[$this->matrixIndex]->apply($x, $y); - $width -= $x; - $height -= $y; - - $startColor = $this->getColorPixel($gradient->getStartColor())->getColorAsString(); - $endColor = $this->getColorPixel($gradient->getEndColor())->getColorAsString(); - $gradientImage = new Imagick(); - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $gradientImage->newPseudoImage((int) $height, (int) $width, sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - $gradientImage->rotateImage('transparent', -90); - break; - - case GradientType::VERTICAL(): - $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - break; - - case GradientType::DIAGONAL(): - case GradientType::INVERSE_DIAGONAL(): - $gradientImage->newPseudoImage((int) ($width * sqrt(2)), (int) ($height * sqrt(2)), sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - - if (GradientType::DIAGONAL() === $gradient->getType()) { - $gradientImage->rotateImage('transparent', -45); - } else { - $gradientImage->rotateImage('transparent', -135); - } - - $rotatedWidth = $gradientImage->getImageWidth(); - $rotatedHeight = $gradientImage->getImageHeight(); - - $gradientImage->setImagePage($rotatedWidth, $rotatedHeight, 0, 0); - $gradientImage->cropImage( - intdiv($rotatedWidth, 2) - 2, - intdiv($rotatedHeight, 2) - 2, - intdiv($rotatedWidth, 4) + 1, - intdiv($rotatedWidth, 4) + 1 - ); - break; - - case GradientType::RADIAL(): - $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( - 'radial-gradient:%s-%s', - $startColor, - $endColor - )); - break; - } - - $id = sprintf('g%d', ++$this->gradientCount); - $this->draw->pushPattern($id, 0, 0, $x + $width, $y + $height); - $this->draw->composite(Imagick::COMPOSITE_COPY, $x, $y, $width, $height, $gradientImage); - $this->draw->popPattern(); - return $id; - } - - private function getColorPixel(ColorInterface $color) : ImagickPixel - { - $alpha = 100; - - if ($color instanceof Alpha) { - $alpha = $color->getAlpha(); - $color = $color->getBaseColor(); - } - - if ($color instanceof Rgb) { - return new ImagickPixel(sprintf( - 'rgba(%d, %d, %d, %F)', - $color->getRed(), - $color->getGreen(), - $color->getBlue(), - $alpha / 100 - )); - } - - if ($color instanceof Cmyk) { - return new ImagickPixel(sprintf( - 'cmyka(%d, %d, %d, %d, %F)', - $color->getCyan(), - $color->getMagenta(), - $color->getYellow(), - $color->getBlack(), - $alpha / 100 - )); - } - - if ($color instanceof Gray) { - return new ImagickPixel(sprintf( - 'graya(%d%%, %F)', - $color->getGray(), - $alpha / 100 - )); - } - - return $this->getColorPixel(new Alpha($alpha, $color->toRgb())); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php deleted file mode 100644 index 714da6e..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php +++ /dev/null @@ -1,369 +0,0 @@ -xmlWriter = new XMLWriter(); - $this->xmlWriter->openMemory(); - - $this->xmlWriter->startDocument('1.0', 'UTF-8'); - $this->xmlWriter->startElement('svg'); - $this->xmlWriter->writeAttribute('xmlns', 'http://www.w3.org/2000/svg'); - $this->xmlWriter->writeAttribute('version', '1.1'); - $this->xmlWriter->writeAttribute('width', (string) $size); - $this->xmlWriter->writeAttribute('height', (string) $size); - $this->xmlWriter->writeAttribute('viewBox', '0 0 '. $size . ' ' . $size); - - $this->gradientCount = 0; - $this->currentStack = 0; - $this->stack[0] = 0; - - $alpha = 1; - - if ($backgroundColor instanceof Alpha) { - $alpha = $backgroundColor->getAlpha() / 100; - } - - if (0 === $alpha) { - return; - } - - $this->xmlWriter->startElement('rect'); - $this->xmlWriter->writeAttribute('x', '0'); - $this->xmlWriter->writeAttribute('y', '0'); - $this->xmlWriter->writeAttribute('width', (string) $size); - $this->xmlWriter->writeAttribute('height', (string) $size); - $this->xmlWriter->writeAttribute('fill', $this->getColorString($backgroundColor)); - - if ($alpha < 1) { - $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); - } - - $this->xmlWriter->endElement(); - } - - public function scale(float $size) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute( - 'transform', - sprintf('scale(%s)', round($size, self::PRECISION)) - ); - ++$this->stack[$this->currentStack]; - } - - public function translate(float $x, float $y) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute( - 'transform', - sprintf('translate(%s,%s)', round($x, self::PRECISION), round($y, self::PRECISION)) - ); - ++$this->stack[$this->currentStack]; - } - - public function rotate(int $degrees) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute('transform', sprintf('rotate(%d)', $degrees)); - ++$this->stack[$this->currentStack]; - } - - public function push() : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->stack[] = 1; - ++$this->currentStack; - } - - public function pop() : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - for ($i = 0; $i < $this->stack[$this->currentStack]; ++$i) { - $this->xmlWriter->endElement(); - } - - array_pop($this->stack); - --$this->currentStack; - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $alpha = 1; - - if ($color instanceof Alpha) { - $alpha = $color->getAlpha() / 100; - } - - $this->startPathElement($path); - $this->xmlWriter->writeAttribute('fill', $this->getColorString($color)); - - if ($alpha < 1) { - $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); - } - - $this->xmlWriter->endElement(); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $gradientId = $this->createGradientFill($gradient, $x, $y, $width, $height); - $this->startPathElement($path); - $this->xmlWriter->writeAttribute('fill', 'url(#' . $gradientId . ')'); - $this->xmlWriter->endElement(); - } - - public function done() : string - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - foreach ($this->stack as $openElements) { - for ($i = $openElements; $i > 0; --$i) { - $this->xmlWriter->endElement(); - } - } - - $this->xmlWriter->endDocument(); - $blob = $this->xmlWriter->outputMemory(true); - $this->xmlWriter = null; - $this->stack = null; - $this->currentStack = null; - $this->gradientCount = null; - - return $blob; - } - - private function startPathElement(Path $path) : void - { - $pathData = []; - - foreach ($path as $op) { - switch (true) { - case $op instanceof Move: - $pathData[] = sprintf( - 'M%s %s', - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof Line: - $pathData[] = sprintf( - 'L%s %s', - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof EllipticArc: - $pathData[] = sprintf( - 'A%s %s %s %u %u %s %s', - round($op->getXRadius(), self::PRECISION), - round($op->getYRadius(), self::PRECISION), - round($op->getXAxisAngle(), self::PRECISION), - $op->isLargeArc(), - $op->isSweep(), - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof Curve: - $pathData[] = sprintf( - 'C%s %s %s %s %s %s', - round($op->getX1(), self::PRECISION), - round($op->getY1(), self::PRECISION), - round($op->getX2(), self::PRECISION), - round($op->getY2(), self::PRECISION), - round($op->getX3(), self::PRECISION), - round($op->getY3(), self::PRECISION) - ); - break; - - case $op instanceof Close: - $pathData[] = 'Z'; - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - $this->xmlWriter->startElement('path'); - $this->xmlWriter->writeAttribute('fill-rule', 'evenodd'); - $this->xmlWriter->writeAttribute('d', implode('', $pathData)); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string - { - $this->xmlWriter->startElement('defs'); - - $startColor = $gradient->getStartColor(); - $endColor = $gradient->getEndColor(); - - if ($gradient->getType() === GradientType::RADIAL()) { - $this->xmlWriter->startElement('radialGradient'); - } else { - $this->xmlWriter->startElement('linearGradient'); - } - - $this->xmlWriter->writeAttribute('gradientUnits', 'userSpaceOnUse'); - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); - break; - - case GradientType::VERTICAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); - break; - - case GradientType::DIAGONAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); - break; - - case GradientType::INVERSE_DIAGONAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y + $height, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); - break; - - case GradientType::RADIAL(): - $this->xmlWriter->writeAttribute('cx', (string) round(($x + $width) / 2, self::PRECISION)); - $this->xmlWriter->writeAttribute('cy', (string) round(($y + $height) / 2, self::PRECISION)); - $this->xmlWriter->writeAttribute('r', (string) round(max($width, $height) / 2, self::PRECISION)); - break; - } - - $id = sprintf('g%d', ++$this->gradientCount); - $this->xmlWriter->writeAttribute('id', $id); - - $this->xmlWriter->startElement('stop'); - $this->xmlWriter->writeAttribute('offset', '0%'); - $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor)); - - if ($startColor instanceof Alpha) { - $this->xmlWriter->writeAttribute('stop-opacity', $startColor->getAlpha()); - } - - $this->xmlWriter->endElement(); - - $this->xmlWriter->startElement('stop'); - $this->xmlWriter->writeAttribute('offset', '100%'); - $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor)); - - if ($endColor instanceof Alpha) { - $this->xmlWriter->writeAttribute('stop-opacity', $endColor->getAlpha()); - } - - $this->xmlWriter->endElement(); - - $this->xmlWriter->endElement(); - $this->xmlWriter->endElement(); - - return $id; - } - - private function getColorString(ColorInterface $color) : string - { - $color = $color->toRgb(); - - return sprintf( - '#%02x%02x%02x', - $color->getRed(), - $color->getGreen(), - $color->getBlue() - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php deleted file mode 100644 index 7e88da6..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php +++ /dev/null @@ -1,68 +0,0 @@ -values = [1, 0, 0, 1, 0, 0]; - } - - public function multiply(self $other) : self - { - $matrix = new self(); - $matrix->values[0] = $this->values[0] * $other->values[0] + $this->values[2] * $other->values[1]; - $matrix->values[1] = $this->values[1] * $other->values[0] + $this->values[3] * $other->values[1]; - $matrix->values[2] = $this->values[0] * $other->values[2] + $this->values[2] * $other->values[3]; - $matrix->values[3] = $this->values[1] * $other->values[2] + $this->values[3] * $other->values[3]; - $matrix->values[4] = $this->values[0] * $other->values[4] + $this->values[2] * $other->values[5] - + $this->values[4]; - $matrix->values[5] = $this->values[1] * $other->values[4] + $this->values[3] * $other->values[5] - + $this->values[5]; - - return $matrix; - } - - public static function scale(float $size) : self - { - $matrix = new self(); - $matrix->values = [$size, 0, 0, $size, 0, 0]; - return $matrix; - } - - public static function translate(float $x, float $y) : self - { - $matrix = new self(); - $matrix->values = [1, 0, 0, 1, $x, $y]; - return $matrix; - } - - public static function rotate(int $degrees) : self - { - $matrix = new self(); - $rad = deg2rad($degrees); - $matrix->values = [cos($rad), sin($rad), -sin($rad), cos($rad), 0, 0]; - return $matrix; - } - - - /** - * Applies this matrix onto a point and returns the resulting viewport point. - * - * @return float[] - */ - public function apply(float $x, float $y) : array - { - return [ - $x * $this->values[0] + $y * $this->values[2] + $this->values[4], - $x * $this->values[1] + $y * $this->values[3] + $this->values[5], - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php deleted file mode 100644 index ab16276..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php +++ /dev/null @@ -1,152 +0,0 @@ -rendererStyle = $rendererStyle; - $this->imageBackEnd = $imageBackEnd; - } - - /** - * @throws InvalidArgumentException if matrix width doesn't match height - */ - public function render(QrCode $qrCode) : string - { - $size = $this->rendererStyle->getSize(); - $margin = $this->rendererStyle->getMargin(); - $matrix = $qrCode->getMatrix(); - $matrixSize = $matrix->getWidth(); - - if ($matrixSize !== $matrix->getHeight()) { - throw new InvalidArgumentException('Matrix must have the same width and height'); - } - - $totalSize = $matrixSize + ($margin * 2); - $moduleSize = $size / $totalSize; - $fill = $this->rendererStyle->getFill(); - - $this->imageBackEnd->new($size, $fill->getBackgroundColor()); - $this->imageBackEnd->scale((float) $moduleSize); - $this->imageBackEnd->translate((float) $margin, (float) $margin); - - $module = $this->rendererStyle->getModule(); - $moduleMatrix = clone $matrix; - MatrixUtil::removePositionDetectionPatterns($moduleMatrix); - $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix)); - - if ($fill->hasGradientFill()) { - $this->imageBackEnd->drawPathWithGradient( - $modulePath, - $fill->getForegroundGradient(), - 0, - 0, - $matrixSize, - $matrixSize - ); - } else { - $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor()); - } - - return $this->imageBackEnd->done(); - } - - private function drawEyes(int $matrixSize, Path $modulePath) : Path - { - $fill = $this->rendererStyle->getFill(); - - $eye = $this->rendererStyle->getEye(); - $externalPath = $eye->getExternalPath(); - $internalPath = $eye->getInternalPath(); - - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getTopLeftEyeFill(), - 3.5, - 3.5, - 0, - $modulePath - ); - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getTopRightEyeFill(), - $matrixSize - 3.5, - 3.5, - 90, - $modulePath - ); - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getBottomLeftEyeFill(), - 3.5, - $matrixSize - 3.5, - -90, - $modulePath - ); - - return $modulePath; - } - - private function drawEye( - Path $externalPath, - Path $internalPath, - EyeFill $fill, - float $xTranslation, - float $yTranslation, - int $rotation, - Path $modulePath - ) : Path { - if ($fill->inheritsBothColors()) { - return $modulePath - ->append($externalPath->translate($xTranslation, $yTranslation)) - ->append($internalPath->translate($xTranslation, $yTranslation)); - } - - $this->imageBackEnd->push(); - $this->imageBackEnd->translate($xTranslation, $yTranslation); - - if (0 !== $rotation) { - $this->imageBackEnd->rotate($rotation); - } - - if ($fill->inheritsExternalColor()) { - $modulePath = $modulePath->append($externalPath->translate($xTranslation, $yTranslation)); - } else { - $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor()); - } - - if ($fill->inheritsInternalColor()) { - $modulePath = $modulePath->append($internalPath->translate($xTranslation, $yTranslation)); - } else { - $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor()); - } - - $this->imageBackEnd->pop(); - - return $modulePath; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php deleted file mode 100644 index f536e5a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php +++ /dev/null @@ -1,63 +0,0 @@ - 1) { - throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->size = $size; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - $path = new Path(); - $halfSize = $this->size / 2; - $margin = (1 - $this->size) / 2; - - for ($y = 0; $y < $height; ++$y) { - for ($x = 0; $x < $width; ++$x) { - if (! $matrix->get($x, $y)) { - continue; - } - - $pathX = $x + $margin; - $pathY = $y + $margin; - - $path = $path - ->move($pathX + $this->size, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize) - ->close() - ; - } - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php deleted file mode 100644 index 90482f2..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php +++ /dev/null @@ -1,100 +0,0 @@ - - */ - private $points = []; - - /** - * @var array|null - */ - private $simplifiedPoints; - - /** - * @var int - */ - private $minX = PHP_INT_MAX; - - /** - * @var int - */ - private $minY = PHP_INT_MAX; - - /** - * @var int - */ - private $maxX = -1; - - /** - * @var int - */ - private $maxY = -1; - - public function __construct(bool $positive) - { - $this->positive = $positive; - } - - public function addPoint(int $x, int $y) : void - { - $this->points[] = [$x, $y]; - $this->minX = min($this->minX, $x); - $this->minY = min($this->minY, $y); - $this->maxX = max($this->maxX, $x); - $this->maxY = max($this->maxY, $y); - } - - public function isPositive() : bool - { - return $this->positive; - } - - /** - * @return array - */ - public function getPoints() : array - { - return $this->points; - } - - public function getMaxX() : int - { - return $this->maxX; - } - - public function getSimplifiedPoints() : array - { - if (null !== $this->simplifiedPoints) { - return $this->simplifiedPoints; - } - - $points = []; - $length = count($this->points); - - for ($i = 0; $i < $length; ++$i) { - $previousPoint = $this->points[(0 === $i ? $length : $i) - 1]; - $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1]; - $currentPoint = $this->points[$i]; - - if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0]) - || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1]) - ) { - continue; - } - - $points[] = $currentPoint; - } - - return $this->simplifiedPoints = $points; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php deleted file mode 100644 index af52d52..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php +++ /dev/null @@ -1,169 +0,0 @@ -bytes = iterator_to_array($matrix->getBytes()); - $this->size = count($this->bytes); - $this->width = $matrix->getWidth(); - $this->height = $matrix->getHeight(); - } - - /** - * @return Edge[] - */ - public function getIterator() : Traversable - { - $originalBytes = $this->bytes; - $point = $this->findNext(0, 0); - - while (null !== $point) { - $edge = $this->findEdge($point[0], $point[1]); - $this->xorEdge($edge); - - yield $edge; - - $point = $this->findNext($point[0], $point[1]); - } - - $this->bytes = $originalBytes; - } - - /** - * @return int[]|null - */ - private function findNext(int $x, int $y) : ?array - { - $i = $this->width * $y + $x; - - while ($i < $this->size && 1 !== $this->bytes[$i]) { - ++$i; - } - - if ($i < $this->size) { - return $this->pointOf($i); - } - - return null; - } - - private function findEdge(int $x, int $y) : Edge - { - $edge = new Edge($this->isSet($x, $y)); - $startX = $x; - $startY = $y; - $dirX = 0; - $dirY = 1; - - while (true) { - $edge->addPoint($x, $y); - $x += $dirX; - $y += $dirY; - - if ($x === $startX && $y === $startY) { - break; - } - - $left = $this->isSet($x + ($dirX + $dirY - 1 ) / 2, $y + ($dirY - $dirX - 1) / 2); - $right = $this->isSet($x + ($dirX - $dirY - 1) / 2, $y + ($dirY + $dirX - 1) / 2); - - if ($right && ! $left) { - $tmp = $dirX; - $dirX = -$dirY; - $dirY = $tmp; - } elseif ($right) { - $tmp = $dirX; - $dirX = -$dirY; - $dirY = $tmp; - } elseif (! $left) { - $tmp = $dirX; - $dirX = $dirY; - $dirY = -$tmp; - } - } - - return $edge; - } - - private function xorEdge(Edge $path) : void - { - $points = $path->getPoints(); - $y1 = $points[0][1]; - $length = count($points); - $maxX = $path->getMaxX(); - - for ($i = 1; $i < $length; ++$i) { - $y = $points[$i][1]; - - if ($y === $y1) { - continue; - } - - $x = $points[$i][0]; - $minY = min($y1, $y); - - for ($j = $x; $j < $maxX; ++$j) { - $this->flip($j, $minY); - } - - $y1 = $y; - } - } - - private function isSet(int $x, int $y) : bool - { - return ( - $x >= 0 - && $x < $this->width - && $y >= 0 - && $y < $this->height - ) && 1 === $this->bytes[$this->width * $y + $x]; - } - - /** - * @return int[] - */ - private function pointOf(int $i) : array - { - $y = intdiv($i, $this->width); - return [$i - $y * $this->width, $y]; - } - - private function flip(int $x, int $y) : void - { - $this->bytes[$this->width * $y + $x] = ( - $this->isSet($x, $y) ? 0 : 1 - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php deleted file mode 100644 index 0ccb0e0..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php +++ /dev/null @@ -1,18 +0,0 @@ - 1) { - throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->intensity = $intensity / 2; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $path = new Path(); - - foreach (new EdgeIterator($matrix) as $edge) { - $points = $edge->getSimplifiedPoints(); - $length = count($points); - - $currentPoint = $points[0]; - $nextPoint = $points[1]; - $horizontal = ($currentPoint[1] === $nextPoint[1]); - - if ($horizontal) { - $right = $nextPoint[0] > $currentPoint[0]; - $path = $path->move( - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } else { - $up = $nextPoint[0] < $currentPoint[0]; - $path = $path->move( - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } - - for ($i = 1; $i <= $length; ++$i) { - if ($i === $length) { - $previousPoint = $points[$length - 1]; - $currentPoint = $points[0]; - $nextPoint = $points[1]; - } else { - $previousPoint = $points[(0 === $i ? $length : $i) - 1]; - $currentPoint = $points[$i]; - $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1]; - } - - $horizontal = ($previousPoint[1] === $currentPoint[1]); - - if ($horizontal) { - $right = $previousPoint[0] < $currentPoint[0]; - $up = $nextPoint[1] < $currentPoint[1]; - $sweep = ($up xor $right); - - if ($this->intensity < 0.5 - || ($right && $previousPoint[0] !== $currentPoint[0] - 1) - || (! $right && $previousPoint[0] - 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0] + ($right ? -$this->intensity : $this->intensity), - $currentPoint[1] - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } else { - $up = $previousPoint[1] > $currentPoint[1]; - $right = $nextPoint[0] > $currentPoint[0]; - $sweep = ! ($up xor $right); - - if ($this->intensity < 0.5 - || ($up && $previousPoint[1] !== $currentPoint[1] + 1) - || (! $up && $previousPoint[0] + 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0], - $currentPoint[1] + ($up ? $this->intensity : -$this->intensity) - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } - } - - $path = $path->close(); - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php deleted file mode 100644 index 9ab4607..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php +++ /dev/null @@ -1,47 +0,0 @@ -getSimplifiedPoints(); - $length = count($points); - $path = $path->move($points[0][0], $points[0][1]); - - for ($i = 1; $i < $length; ++$i) { - $path = $path->line($points[$i][0], $points[$i][1]); - } - - $path = $path->close(); - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php deleted file mode 100644 index b07feb0..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php +++ /dev/null @@ -1,29 +0,0 @@ -x1 = $x1; - $this->y1 = $y1; - $this->x2 = $x2; - $this->y2 = $y2; - $this->x3 = $x3; - $this->y3 = $y3; - } - - public function getX1() : float - { - return $this->x1; - } - - public function getY1() : float - { - return $this->y1; - } - - public function getX2() : float - { - return $this->x2; - } - - public function getY2() : float - { - return $this->y2; - } - - public function getX3() : float - { - return $this->x3; - } - - public function getY3() : float - { - return $this->y3; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self( - $this->x1 + $x, - $this->y1 + $y, - $this->x2 + $x, - $this->y2 + $y, - $this->x3 + $x, - $this->y3 + $y - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php deleted file mode 100644 index eff7deb..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php +++ /dev/null @@ -1,278 +0,0 @@ -xRadius = abs($xRadius); - $this->yRadius = abs($yRadius); - $this->xAxisAngle = $xAxisAngle % 360; - $this->largeArc = $largeArc; - $this->sweep = $sweep; - $this->x = $x; - $this->y = $y; - } - - public function getXRadius() : float - { - return $this->xRadius; - } - - public function getYRadius() : float - { - return $this->yRadius; - } - - public function getXAxisAngle() : float - { - return $this->xAxisAngle; - } - - public function isLargeArc() : bool - { - return $this->largeArc; - } - - public function isSweep() : bool - { - return $this->sweep; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self( - $this->xRadius, - $this->yRadius, - $this->xAxisAngle, - $this->largeArc, - $this->sweep, - $this->x + $x, - $this->y + $y - ); - } - - /** - * Converts the elliptic arc to multiple curves. - * - * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves - * resembling the same result. - * - * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ - * @return array - */ - public function toCurves(float $fromX, float $fromY) : array - { - if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) { - return []; - } - - if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) { - return [new Line($this->x, $this->y)]; - } - - return $this->createCurves($fromX, $fromY); - } - - /** - * @return Curve[] - */ - private function createCurves(float $fromX, $fromY) : array - { - $xAngle = deg2rad($this->xAxisAngle); - list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) = - $this->calculateCenterPointParameters($fromX, $fromY, $xAngle); - - $s = $startAngle; - $e = $s + $deltaAngle; - $sign = ($e < $s) ? -1 : 1; - $remain = abs($e - $s); - $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s); - $curves = []; - - while ($remain > self::ZERO_TOLERANCE) { - $step = min($remain, pi() / 2); - $signStep = $step * $sign; - $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep); - - $alphaT = tan($signStep / 2); - $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3; - $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s); - $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep); - - $curves[] = new Curve( - $p1[0] + $alpha * $d1[0], - $p1[1] + $alpha * $d1[1], - $p2[0] - $alpha * $d2[0], - $p2[1] - $alpha * $d2[1], - $p2[0], - $p2[1] - ); - - $s += $signStep; - $remain -= $step; - $p1 = $p2; - } - - return $curves; - } - - /** - * @return float[] - */ - private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle) - { - $rX = $this->xRadius; - $rY = $this->yRadius; - - // F.6.5.1 - $dx2 = ($fromX - $this->x) / 2; - $dy2 = ($fromY - $this->y) / 2; - $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2; - $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2; - - // F.6.5.2 - $rxs = $rX ** 2; - $rys = $rY ** 2; - $x1ps = $x1p ** 2; - $y1ps = $y1p ** 2; - $cr = $x1ps / $rxs + $y1ps / $rys; - - if ($cr > 1) { - $s = sqrt($cr); - $rX *= $s; - $rY *= $s; - $rxs = $rX ** 2; - $rys = $rY ** 2; - } - - $dq = ($rxs * $y1ps + $rys * $x1ps); - $pq = ($rxs * $rys - $dq) / $dq; - $q = sqrt(max(0, $pq)); - - if ($this->largeArc === $this->sweep) { - $q = -$q; - } - - $cxp = $q * $rX * $y1p / $rY; - $cyp = -$q * $rY * $x1p / $rX; - - // F.6.5.3 - $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2; - $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2; - - // F.6.5.5 - $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY); - - // F.6.5.6 - $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY); - $delta = fmod($delta, pi() * 2); - - if (! $this->sweep) { - $delta -= 2 * pi(); - } - - return [$cx, $cy, $rX, $rY, $theta, $delta]; - } - - private static function angle(float $ux, float $uy, float $vx, float $vy) : float - { - // F.6.5.4 - $dot = $ux * $vx + $uy * $vy; - $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2); - $angle = acos(min(1, max(-1, $dot / $length))); - - if (($ux * $vy - $uy * $vx) < 0) { - return -$angle; - } - - return $angle; - } - - /** - * @return float[] - */ - private static function point( - float $centerX, - float $centerY, - float $radiusX, - float $radiusY, - float $xAngle, - float $angle - ) : array { - return [ - $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle), - $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle), - ]; - } - - /** - * @return float[] - */ - private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array - { - return [ - -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle), - -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle), - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php deleted file mode 100644 index 3149a39..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php +++ /dev/null @@ -1,41 +0,0 @@ -x = $x; - $this->y = $y; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self($this->x + $x, $this->y + $y); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php deleted file mode 100644 index 481d0dd..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php +++ /dev/null @@ -1,41 +0,0 @@ -x = $x; - $this->y = $y; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self($this->x + $x, $this->y + $y); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php deleted file mode 100644 index a5fa0ed..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -operations[] = new Move($x, $y); - return $path; - } - - /** - * Draws a line from the current position to another position. - */ - public function line(float $x, float $y) : self - { - $path = clone $this; - $path->operations[] = new Line($x, $y); - return $path; - } - - /** - * Draws an elliptic arc from the current position to another position. - */ - public function ellipticArc( - float $xRadius, - float $yRadius, - float $xAxisRotation, - bool $largeArc, - bool $sweep, - float $x, - float $y - ) : self { - $path = clone $this; - $path->operations[] = new EllipticArc($xRadius, $yRadius, $xAxisRotation, $largeArc, $sweep, $x, $y); - return $path; - } - - /** - * Draws a curve from the current position to another position. - */ - public function curve(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3) : self - { - $path = clone $this; - $path->operations[] = new Curve($x1, $y1, $x2, $y2, $x3, $y3); - return $path; - } - - /** - * Closes a sub-path. - */ - public function close() : self - { - $path = clone $this; - $path->operations[] = Close::instance(); - return $path; - } - - /** - * Appends another path to this one. - */ - public function append(self $other) : self - { - $path = clone $this; - $path->operations = array_merge($this->operations, $other->operations); - return $path; - } - - public function translate(float $x, float $y) : self - { - $path = new self(); - - foreach ($this->operations as $operation) { - $path->operations[] = $operation->translate($x, $y); - } - - return $path; - } - - /** - * @return OperationInterface[]|Traversable - */ - public function getIterator() : Traversable - { - foreach ($this->operations as $operation) { - yield $operation; - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php deleted file mode 100644 index 8aa7652..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php +++ /dev/null @@ -1,86 +0,0 @@ -margin = $margin; - } - - /** - * @throws InvalidArgumentException if matrix width doesn't match height - */ - public function render(QrCode $qrCode) : string - { - $matrix = $qrCode->getMatrix(); - $matrixSize = $matrix->getWidth(); - - if ($matrixSize !== $matrix->getHeight()) { - throw new InvalidArgumentException('Matrix must have the same width and height'); - } - - $rows = $matrix->getArray()->toArray(); - - if (0 !== $matrixSize % 2) { - $rows[] = array_fill(0, $matrixSize, 0); - } - - $horizontalMargin = str_repeat(self::EMPTY_BLOCK, $this->margin); - $result = str_repeat("\n", (int) ceil($this->margin / 2)); - - for ($i = 0; $i < $matrixSize; $i += 2) { - $result .= $horizontalMargin; - - $upperRow = $rows[$i]; - $lowerRow = $rows[$i + 1]; - - for ($j = 0; $j < $matrixSize; ++$j) { - $upperBit = $upperRow[$j]; - $lowerBit = $lowerRow[$j]; - - if ($upperBit) { - $result .= $lowerBit ? self::FULL_BLOCK : self::UPPER_HALF_BLOCK; - } else { - $result .= $lowerBit ? self::LOWER_HALF_BLOCK : self::EMPTY_BLOCK; - } - } - - $result .= $horizontalMargin . "\n"; - } - - $result .= str_repeat("\n", (int) ceil($this->margin / 2)); - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php deleted file mode 100644 index b0aae39..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php +++ /dev/null @@ -1,11 +0,0 @@ -externalColor = $externalColor; - $this->internalColor = $internalColor; - } - - public static function uniform(ColorInterface $color) : self - { - return new self($color, $color); - } - - public static function inherit() : self - { - return self::$inherit ?: self::$inherit = new self(null, null); - } - - public function inheritsBothColors() : bool - { - return null === $this->externalColor && null === $this->internalColor; - } - - public function inheritsExternalColor() : bool - { - return null === $this->externalColor; - } - - public function inheritsInternalColor() : bool - { - return null === $this->internalColor; - } - - public function getExternalColor() : ColorInterface - { - if (null === $this->externalColor) { - throw new RuntimeException('External eye color inherits foreground color'); - } - - return $this->externalColor; - } - - public function getInternalColor() : ColorInterface - { - if (null === $this->internalColor) { - throw new RuntimeException('Internal eye color inherits foreground color'); - } - - return $this->internalColor; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php deleted file mode 100644 index d54268e..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php +++ /dev/null @@ -1,168 +0,0 @@ -backgroundColor = $backgroundColor; - $this->foregroundColor = $foregroundColor; - $this->foregroundGradient = $foregroundGradient; - $this->topLeftEyeFill = $topLeftEyeFill; - $this->topRightEyeFill = $topRightEyeFill; - $this->bottomLeftEyeFill = $bottomLeftEyeFill; - } - - public static function default() : self - { - return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0)); - } - - public static function withForegroundColor( - ColorInterface $backgroundColor, - ColorInterface $foregroundColor, - EyeFill $topLeftEyeFill, - EyeFill $topRightEyeFill, - EyeFill $bottomLeftEyeFill - ) : self { - return new self( - $backgroundColor, - $foregroundColor, - null, - $topLeftEyeFill, - $topRightEyeFill, - $bottomLeftEyeFill - ); - } - - public static function withForegroundGradient( - ColorInterface $backgroundColor, - Gradient $foregroundGradient, - EyeFill $topLeftEyeFill, - EyeFill $topRightEyeFill, - EyeFill $bottomLeftEyeFill - ) : self { - return new self( - $backgroundColor, - null, - $foregroundGradient, - $topLeftEyeFill, - $topRightEyeFill, - $bottomLeftEyeFill - ); - } - - public static function uniformColor(ColorInterface $backgroundColor, ColorInterface $foregroundColor) : self - { - return new self( - $backgroundColor, - $foregroundColor, - null, - EyeFill::inherit(), - EyeFill::inherit(), - EyeFill::inherit() - ); - } - - public static function uniformGradient(ColorInterface $backgroundColor, Gradient $foregroundGradient) : self - { - return new self( - $backgroundColor, - null, - $foregroundGradient, - EyeFill::inherit(), - EyeFill::inherit(), - EyeFill::inherit() - ); - } - - public function hasGradientFill() : bool - { - return null !== $this->foregroundGradient; - } - - public function getBackgroundColor() : ColorInterface - { - return $this->backgroundColor; - } - - public function getForegroundColor() : ColorInterface - { - if (null === $this->foregroundColor) { - throw new RuntimeException('Fill uses a gradient, thus no foreground color is available'); - } - - return $this->foregroundColor; - } - - public function getForegroundGradient() : Gradient - { - if (null === $this->foregroundGradient) { - throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available'); - } - - return $this->foregroundGradient; - } - - public function getTopLeftEyeFill() : EyeFill - { - return $this->topLeftEyeFill; - } - - public function getTopRightEyeFill() : EyeFill - { - return $this->topRightEyeFill; - } - - public function getBottomLeftEyeFill() : EyeFill - { - return $this->bottomLeftEyeFill; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php deleted file mode 100644 index 3813dfd..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php +++ /dev/null @@ -1,46 +0,0 @@ -startColor = $startColor; - $this->endColor = $endColor; - $this->type = $type; - } - - public function getStartColor() : ColorInterface - { - return $this->startColor; - } - - public function getEndColor() : ColorInterface - { - return $this->endColor; - } - - public function getType() : GradientType - { - return $this->type; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php deleted file mode 100644 index c1ca754..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php +++ /dev/null @@ -1,22 +0,0 @@ -margin = $margin; - $this->size = $size; - $this->module = $module ?: SquareModule::instance(); - $this->eye = $eye ?: new ModuleEye($this->module); - $this->fill = $fill ?: Fill::default(); - } - - public function withSize(int $size) : self - { - $style = clone $this; - $style->size = $size; - return $style; - } - - public function withMargin(int $margin) : self - { - $style = clone $this; - $style->margin = $margin; - return $style; - } - - public function getSize() : int - { - return $this->size; - } - - public function getMargin() : int - { - return $this->margin; - } - - public function getModule() : ModuleInterface - { - return $this->module; - } - - public function getEye() : EyeInterface - { - return $this->eye; - } - - public function getFill() : Fill - { - return $this->fill; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Writer.php b/conlite/external/bacon/bacon-qr-code/src/Writer.php deleted file mode 100644 index 6688901..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Writer.php +++ /dev/null @@ -1,68 +0,0 @@ -renderer = $renderer; - } - - /** - * Writes QR code and returns it as string. - * - * Content is a string which *should* be encoded in UTF-8, in case there are - * non ASCII-characters present. - * - * @throws InvalidArgumentException if the content is empty - */ - public function writeString( - string $content, - string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING, - ?ErrorCorrectionLevel $ecLevel = null - ) : string { - if (strlen($content) === 0) { - throw new InvalidArgumentException('Found empty contents'); - } - - if (null === $ecLevel) { - $ecLevel = ErrorCorrectionLevel::L(); - } - - return $this->renderer->render(Encoder::encode($content, $ecLevel, $encoding)); - } - - /** - * Writes QR code to a file. - * - * @see Writer::writeString() - */ - public function writeFile( - string $content, - string $filename, - string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING, - ?ErrorCorrectionLevel $ecLevel = null - ) : void { - file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php deleted file mode 100644 index add798b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php +++ /dev/null @@ -1,222 +0,0 @@ -assertFalse($array->get($i)); - $array->set($i); - $this->assertTrue($array->get($i)); - } - } - - public function testGetNextSet1() : void - { - $array = new BitArray(32); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 32, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i)); - } - } - - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 33, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 33, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet2() : void - { - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $i <= 31 ? 31 : 33, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $i <= 31 ? 31 : 33, $array->getNextSet($i)); - } - } - - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 32, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet3() : void - { - $array = new BitArray(63); - $array->set(31); - $array->set(32); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($i <= 31) { - $expected = 31; - } elseif ($i <= 32) { - $expected = 32; - } else { - $expected = 63; - } - - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $expected, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet4() : void - { - $array = new BitArray(63); - $array->set(33); - $array->set(40); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($i <= 33) { - $expected = 33; - } elseif ($i <= 40) { - $expected = 40; - } else { - $expected = 63; - } - - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $expected, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet5() : void - { - mt_srand(0xdeadbeef, MT_RAND_PHP); - - for ($i = 0; $i < 10; ++$i) { - $array = new BitArray(mt_rand(1, 100)); - $numSet = mt_rand(0, 19); - - for ($j = 0; $j < $numSet; ++$j) { - $array->set(mt_rand(0, $array->getSize() - 1)); - } - - $numQueries = mt_rand(0, 19); - - for ($j = 0; $j < $numQueries; ++$j) { - $query = mt_rand(0, $array->getSize() - 1); - $expected = $query; - - while ($expected < $array->getSize() && ! $array->get($expected)) { - ++$expected; - } - - $actual = $array->getNextSet($query); - - if ($actual !== $expected) { - $array->getNextSet($query); - } - - $this->assertEquals($expected, $actual); - } - } - } - - public function testSetBulk() : void - { - $array = new BitArray(64); - $array->setBulk(32, 0xFFFF0000); - - for ($i = 0; $i < 48; ++$i) { - $this->assertFalse($array->get($i)); - } - - for ($i = 48; $i < 64; ++$i) { - $this->assertTrue($array->get($i)); - } - } - - public function testClear() : void - { - $array = new BitArray(32); - - for ($i = 0; $i < 32; ++$i) { - $array->set($i); - } - - $array->clear(); - - for ($i = 0; $i < 32; ++$i) { - $this->assertFalse($array->get($i)); - } - } - - public function testGetArray() : void - { - $array = new BitArray(64); - $array->set(0); - $array->set(63); - - $ints = $array->getBitArray(); - - $this->assertSame(1, $ints[0]); - $this->assertSame(0x80000000, $ints[1]); - } - - public function testIsRange() : void - { - $array = new BitArray(64); - $this->assertTrue($array->isRange(0, 64, false)); - $this->assertFalse($array->isRange(0, 64, true)); - - $array->set(32); - $this->assertTrue($array->isRange(32, 33, true)); - - $array->set(31); - $this->assertTrue($array->isRange(31, 33, true)); - - $array->set(34); - $this->assertFalse($array->isRange(31, 35, true)); - - for ($i = 0; $i < 31; ++$i) { - $array->set($i); - } - - $this->assertTrue($array->isRange(0, 33, true)); - - for ($i = 33; $i < 64; ++$i) { - $array->set($i); - } - - $this->assertTrue($array->isRange(0, 64, true)); - $this->assertFalse($array->isRange(0, 64, false)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php deleted file mode 100644 index 8ad86d4..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php +++ /dev/null @@ -1,115 +0,0 @@ -assertEquals(33, $matrix->getHeight()); - - for ($y = 0; $y < 33; ++$y) { - for ($x = 0; $x < 33; ++$x) { - if ($y * $x % 3 === 0) { - $matrix->set($x, $y); - } - } - } - - for ($y = 0; $y < 33; $y++) { - for ($x = 0; $x < 33; ++$x) { - $this->assertSame(0 === $x * $y % 3, $matrix->get($x, $y)); - } - } - } - - public function testSetRegion() : void - { - $matrix = new BitMatrix(5); - $matrix->setRegion(1, 1, 3, 3); - - for ($y = 0; $y < 5; ++$y) { - for ($x = 0; $x < 5; ++$x) { - $this->assertSame($y >= 1 && $y <= 3 && $x >= 1 && $x <= 3, $matrix->get($x, $y)); - } - } - } - - public function testRectangularMatrix() : void - { - $matrix = new BitMatrix(75, 20); - $this->assertSame(75, $matrix->getWidth()); - $this->assertSame(20, $matrix->getHeight()); - - $matrix->set(10, 0); - $matrix->set(11, 1); - $matrix->set(50, 2); - $matrix->set(51, 3); - $matrix->flip(74, 4); - $matrix->flip(0, 5); - - $this->assertTrue($matrix->get(10, 0)); - $this->assertTrue($matrix->get(11, 1)); - $this->assertTrue($matrix->get(50, 2)); - $this->assertTrue($matrix->get(51, 3)); - $this->assertTrue($matrix->get(74, 4)); - $this->assertTrue($matrix->get(0, 5)); - - $matrix->flip(50, 2); - $matrix->flip(51, 3); - - $this->assertFalse($matrix->get(50, 2)); - $this->assertFalse($matrix->get(51, 3)); - } - - public function testRectangularSetRegion() : void - { - $matrix = new BitMatrix(320, 240); - $this->assertSame(320, $matrix->getWidth()); - $this->assertSame(240, $matrix->getHeight()); - - $matrix->setRegion(105, 22, 80, 12); - - for ($y = 0; $y < 240; ++$y) { - for ($x = 0; $x < 320; ++$x) { - $this->assertEquals($y >= 22 && $y < 34 && $x >= 105 && $x < 185, $matrix->get($x, $y)); - } - } - } - - public function testGetRow() : void - { - $matrix = new BitMatrix(102, 5); - - for ($x = 0; $x < 102; ++$x) { - if (0 === ($x & 3)) { - $matrix->set($x, 2); - } - } - - $array1 = $matrix->getRow(2, null); - $this->assertSame(102, $array1->getSize()); - - $array2 = new BitArray(60); - $array2 = $matrix->getRow(2, $array2); - $this->assertSame(102, $array2->getSize()); - - $array3 = new BitArray(200); - $array3 = $matrix->getRow(2, $array3); - $this->assertSame(200, $array3->getSize()); - - for ($x = 0; $x < 102; ++$x) { - $on = (0 === ($x & 3)); - - $this->assertSame($on, $array1->get($x)); - $this->assertSame($on, $array2->get($x)); - $this->assertSame($on, $array3->get($x)); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php deleted file mode 100644 index 2904d31..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php +++ /dev/null @@ -1,25 +0,0 @@ -assertSame(1, BitUtils::unsignedRightShift(1, 0)); - $this->assertSame(1, BitUtils::unsignedRightShift(10, 3)); - $this->assertSame(536870910, BitUtils::unsignedRightShift(-10, 3)); - } - - public function testNumberOfTrailingZeros() : void - { - $this->assertSame(32, BitUtils::numberOfTrailingZeros(0)); - $this->assertSame(1, BitUtils::numberOfTrailingZeros(10)); - $this->assertSame(0, BitUtils::numberOfTrailingZeros(15)); - $this->assertSame(2, BitUtils::numberOfTrailingZeros(20)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php deleted file mode 100644 index 369b5d9..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php +++ /dev/null @@ -1,25 +0,0 @@ -assertSame(0x0, ErrorCorrectionLevel::M()->getBits()); - $this->assertSame(0x1, ErrorCorrectionLevel::L()->getBits()); - $this->assertSame(0x2, ErrorCorrectionLevel::H()->getBits()); - $this->assertSame(0x3, ErrorCorrectionLevel::Q()->getBits()); - } - - public function testInvalidErrorCorrectionLevelThrowsException() : void - { - $this->expectException(OutOfBoundsException::class); - ErrorCorrectionLevel::forBits(4); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php deleted file mode 100644 index 39534a2..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php +++ /dev/null @@ -1,94 +0,0 @@ -assertSame(0, FormatInformation::numBitsDiffering(1, 1)); - $this->assertSame(1, FormatInformation::numBitsDiffering(0, 2)); - $this->assertSame(2, FormatInformation::numBitsDiffering(1, 2)); - $this->assertEquals(32, FormatInformation::numBitsDiffering(-1, 0)); - } - - public function testDecode() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertNotNull($expected); - $this->assertSame(7, $expected->getDataMask()); - $this->assertSame(ErrorCorrectionLevel::Q(), $expected->getErrorCorrectionLevel()); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::UNMAKSED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ) - ); - } - - public function testDecodeWithBitDifference() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x1, - self::MASKED_TEST_FORMAT_INFO ^ 0x1 - ) - ); - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x3, - self::MASKED_TEST_FORMAT_INFO ^ 0x3 - ) - ); - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x7, - self::MASKED_TEST_FORMAT_INFO ^ 0x7 - ) - ); - $this->assertNull( - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0xf, - self::MASKED_TEST_FORMAT_INFO ^ 0xf - ) - ); - } - - public function testDecodeWithMisRead() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x3, - self::MASKED_TEST_FORMAT_INFO ^ 0xf - ) - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php deleted file mode 100644 index 51fcb3e..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php +++ /dev/null @@ -1,19 +0,0 @@ -assertSame(0x0, Mode::TERMINATOR()->getBits()); - $this->assertSame(0x1, Mode::NUMERIC()->getBits()); - $this->assertSame(0x2, Mode::ALPHANUMERIC()->getBits()); - $this->assertSame(0x4, Mode::BYTE()->getBits()); - $this->assertSame(0x8, Mode::KANJI()->getBits()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php deleted file mode 100644 index 47975b5..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php +++ /dev/null @@ -1,96 +0,0 @@ -encode($block, $parity); - - // Copy parity into test blocks - for ($i = 0; $i < $numRoots; ++$i) { - $block[$i + $dataSize] = $parity[$i]; - $tBlock[$i + $dataSize] = $parity[$i]; - } - - // Seed with errors - for ($i = 0; $i < $errors; ++$i) { - $errorValue = mt_rand(1, $blockSize); - - do { - $errorLocation = mt_rand(0, $blockSize); - } while (0 !== $errorLocations[$errorLocation]); - - $errorLocations[$errorLocation] = 1; - - if (mt_rand(0, 1)) { - $erasures[] = $errorLocation; - } - - $tBlock[$errorLocation] ^= $errorValue; - } - - $erasures = SplFixedArray::fromArray($erasures, false); - - // Decode the errored block - $foundErrors = $codec->decode($tBlock, $erasures); - - if ($errors > 0 && null === $foundErrors) { - $this->assertSame($block, $tBlock, 'Decoder failed to correct errors'); - } - - $this->assertSame($errors, $foundErrors, 'Found errors do not equal expected errors'); - - for ($i = 0; $i < $foundErrors; ++$i) { - if (0 === $errorLocations[$erasures[$i]]) { - $this->fail(sprintf('Decoder indicates error in location %d without error', $erasures[$i])); - } - } - - $this->assertEquals($block, $tBlock, 'Decoder did not correct errors'); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php deleted file mode 100644 index f6f038b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php +++ /dev/null @@ -1,78 +0,0 @@ -assertNotNull($version); - $this->assertEquals($versionNumber, $version->getVersionNumber()); - $this->assertNotNull($version->getAlignmentPatternCenters()); - - if ($versionNumber > 1) { - $this->assertTrue(count($version->getAlignmentPatternCenters()) > 0); - } - - $this->assertEquals($dimension, $version->getDimensionForVersion()); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::H())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::L())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::M())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::Q())); - $this->assertNotNull($version->buildFunctionPattern()); - } - - /** - * @dataProvider versions - */ - public function testGetProvisionalVersionForDimension(int $versionNumber, int $dimension) : void - { - $this->assertSame( - $versionNumber, - Version::getProvisionalVersionForDimension($dimension)->getVersionNumber() - ); - } - - /** - * @dataProvider decodeInformation - */ - public function testDecodeVersionInformation(int $expectedVersion, int $mask) : void - { - $version = Version::decodeVersionInformation($mask); - $this->assertNotNull($version); - $this->assertSame($expectedVersion, $version->getVersionNumber()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php deleted file mode 100644 index 9baa66b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php +++ /dev/null @@ -1,487 +0,0 @@ -getMethods(ReflectionMethod::IS_STATIC) as $method) { - $method->setAccessible(true); - $this->methods[$method->getName()] = $method; - } - } - - public function testGetAlphanumericCode() : void - { - // The first ten code points are numbers. - for ($i = 0; $i < 10; ++$i) { - $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('0') + $i)); - } - - // The next 26 code points are capital alphabet letters. - for ($i = 10; $i < 36; ++$i) { - // The first ten code points are numbers - $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('A') + $i - 10)); - } - - // Others are symbol letters. - $this->assertSame(36, $this->methods['getAlphanumericCode']->invoke(null, ord(' '))); - $this->assertSame(37, $this->methods['getAlphanumericCode']->invoke(null, ord('$'))); - $this->assertSame(38, $this->methods['getAlphanumericCode']->invoke(null, ord('%'))); - $this->assertSame(39, $this->methods['getAlphanumericCode']->invoke(null, ord('*'))); - $this->assertSame(40, $this->methods['getAlphanumericCode']->invoke(null, ord('+'))); - $this->assertSame(41, $this->methods['getAlphanumericCode']->invoke(null, ord('-'))); - $this->assertSame(42, $this->methods['getAlphanumericCode']->invoke(null, ord('.'))); - $this->assertSame(43, $this->methods['getAlphanumericCode']->invoke(null, ord('/'))); - $this->assertSame(44, $this->methods['getAlphanumericCode']->invoke(null, ord(':'))); - - // Should return -1 for other letters. - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('a'))); - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('#'))); - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord("\0"))); - } - - public function testChooseMode() : void - { - // Numeric mode - $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0')); - $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0123456789')); - - // Alphanumeric mode - $this->assertSame(Mode::ALPHANUMERIC(), $this->methods['chooseMode']->invoke(null, 'A')); - $this->assertSame( - Mode::ALPHANUMERIC(), - $this->methods['chooseMode']->invoke(null, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:') - ); - - // 8-bit byte mode - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, 'a')); - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, '#')); - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, '')); - - // AIUE in Hiragana in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\x8\xa\x8\xa\x8\xa\x8\xa6")); - - // Nihon in Kanji in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\x9\xf\x9\x7b")); - - // Sou-Utso-Byou in Kanji in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\xe\x4\x9\x5\x9\x61")); - } - - public function testEncode() : void - { - $qrCode = Encoder::encode('ABCDEF', ErrorCorrectionLevel::H()); - $expected = "<<\n" - . " mode: ALPHANUMERIC\n" - . " ecLevel: H\n" - . " version: 1\n" - . " maskPattern: 0\n" - . " matrix:\n" - . " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" - . " 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" - . " 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" - . " 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" - . " 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" - . " 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" - . " 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" - . " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" - . ">>\n"; - - $this->assertSame($expected, (string) $qrCode); - } - - public function testSimpleUtf8Eci() : void - { - $qrCode = Encoder::encode('hello', ErrorCorrectionLevel::H(), 'utf-8'); - $expected = "<<\n" - . " mode: BYTE\n" - . " ecLevel: H\n" - . " version: 1\n" - . " maskPattern: 3\n" - . " matrix:\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0\n" - . " 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0\n" - . " 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1\n" - . " 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0\n" - . " 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0\n" - . " 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0\n" - . " 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0\n" - . " 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0\n" - . ">>\n"; - - $this->assertSame($expected, (string) $qrCode); - } - - public function testAppendModeInfo() : void - { - $bits = new BitArray(); - $this->methods['appendModeInfo']->invoke(null, Mode::NUMERIC(), $bits); - $this->assertSame(' ...X', (string) $bits); - } - - public function testAppendLengthInfo() : void - { - // 1 letter (1/1), 10 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 1, - Version::getVersionForNumber(1), - Mode::NUMERIC(), - $bits - ); - $this->assertSame(' ........ .X', (string) $bits); - - // 2 letters (2/1), 11 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 2, - Version::getVersionForNumber(10), - Mode::ALPHANUMERIC(), - $bits - ); - $this->assertSame(' ........ .X.', (string) $bits); - - // 255 letters (255/1), 16 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 255, - Version::getVersionForNumber(27), - Mode::BYTE(), - $bits - ); - $this->assertSame(' ........ XXXXXXXX', (string) $bits); - - // 512 letters (1024/2), 12 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 512, - Version::getVersionForNumber(40), - Mode::KANJI(), - $bits - ); - $this->assertSame(' ..X..... ....', (string) $bits); - } - - public function testAppendBytes() : void - { - // Should use appendNumericBytes. - // 1 = 01 = 0001 in 4 bits. - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - '1', - Mode::NUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' ...X', (string) $bits); - - // Should use appendAlphaNumericBytes. - // A = 10 = 0xa = 001010 in 6 bits. - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - 'A', - Mode::ALPHANUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' ..X.X.', (string) $bits); - - // Should use append8BitBytes. - // 0x61, 0x62, 0x63 - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - 'abc', - Mode::BYTE(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits); - - // Should use appendKanjiBytes. - // 0x93, 0x5f - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - "\x93\x5f", - Mode::KANJI(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' .XX.XX.. XXXXX', (string) $bits); - - // Lower letters such as 'a' cannot be encoded in alphanumeric mode. - $this->expectException(WriterException::class); - $this->methods['appendBytes']->invoke( - null, - 'a', - Mode::ALPHANUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - } - - public function testTerminateBits() : void - { - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 0, $bits); - $this->assertSame('', (string) $bits); - - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 3); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 5); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 8); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 2, $bits); - $this->assertSame(' ........ XXX.XX..', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 1); - $this->methods['terminateBits']->invoke(null, 3, $bits); - $this->assertSame(' ........ XXX.XX.. ...X...X', (string) $bits); - } - - public function testGetNumDataBytesAndNumEcBytesForBlockId() : void - { - // Version 1-H. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 26, 9, 1, 0); - $this->assertSame(9, $numDataBytes); - $this->assertSame(17, $numEcBytes); - - // Version 3-H. 2 blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 70, 26, 2, 0); - $this->assertSame(13, $numDataBytes); - $this->assertSame(22, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 70, 26, 2, 1); - $this->assertSame(13, $numDataBytes); - $this->assertSame(22, $numEcBytes); - - // Version 7-H. (4 + 1) blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 196, 66, 5, 0); - $this->assertSame(13, $numDataBytes); - $this->assertSame(26, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 196, 66, 5, 4); - $this->assertSame(14, $numDataBytes); - $this->assertSame(26, $numEcBytes); - - // Version 40-H. (20 + 61) blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 0); - $this->assertSame(15, $numDataBytes); - $this->assertSame(30, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 20); - $this->assertSame(16, $numDataBytes); - $this->assertSame(30, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 80); - $this->assertSame(16, $numDataBytes); - $this->assertSame(30, $numEcBytes); - } - - public function testInterleaveWithEcBytes() : void - { - $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false); - $in = new BitArray(); - - foreach ($dataBytes as $dataByte) { - $in->appendBits($dataByte, 8); - } - - $outBits = $this->methods['interleaveWithEcBytes']->invoke(null, $in, 26, 9, 1); - $expected = SplFixedArray::fromArray([ - // Data bytes. - 32, 65, 205, 69, 41, 220, 46, 128, 236, - // Error correction bytes. - 42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61, - ], false); - - $out = $outBits->toBytes(0, count($expected)); - - $this->assertEquals($expected, $out); - } - - public function testAppendNumericBytes() : void - { - // 1 = 01 = 0001 in 4 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '1', $bits); - $this->assertSame(' ...X', (string) $bits); - - // 12 = 0xc = 0001100 in 7 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '12', $bits); - $this->assertSame(' ...XX..', (string) $bits); - - // 123 = 0x7b = 0001111011 in 10 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '123', $bits); - $this->assertSame(' ...XXXX. XX', (string) $bits); - - // 1234 = "123" + "4" = 0001111011 + 0100 in 14 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '1234', $bits); - $this->assertSame(' ...XXXX. XX.X..', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '', $bits); - $this->assertSame('', (string) $bits); - } - - public function testAppendAlphanumericBytes() : void - { - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'A', $bits); - $this->assertSame(' ..X.X.', (string) $bits); - - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'AB', $bits); - $this->assertSame(' ..XXX..X X.X', (string) $bits); - - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'ABC', $bits); - $this->assertSame(' ..XXX..X X.X..XX. .', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, '', $bits); - $this->assertSame('', (string) $bits); - - // Invalid data - $this->expectException(WriterException::class); - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'abc', $bits); - } - - public function testAppend8BitBytes() : void - { - // 0x61, 0x62, 0x63 - $bits = new BitArray(); - $this->methods['append8BitBytes']->invoke(null, 'abc', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING); - $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['append8BitBytes']->invoke(null, '', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING); - $this->assertSame('', (string) $bits); - } - - public function testAppendKanjiBytes() : void - { - // Numbers are from page 21 of JISX0510:2004 - $bits = new BitArray(); - $this->methods['appendKanjiBytes']->invoke(null, "\x93\x5f", $bits); - $this->assertSame(' .XX.XX.. XXXXX', (string) $bits); - - $this->methods['appendKanjiBytes']->invoke(null, "\xe4\xaa", $bits); - $this->assertSame(' .XX.XX.. XXXXXXX. X.X.X.X. X.', (string) $bits); - } - - public function testGenerateEcBytes() : void - { - // Numbers are from http://www.swetake.com/qr/qr3.html and - // http://www.swetake.com/qr/qr9.html - $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17); - $expected = SplFixedArray::fromArray( - [42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61], - false - ); - $this->assertEquals($expected, $ecBytes); - - $dataBytes = SplFixedArray::fromArray( - [67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214], - false - ); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 18); - $expected = SplFixedArray::fromArray( - [175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187], - false - ); - $this->assertEquals($expected, $ecBytes); - - // High-order zero coefficient case. - $dataBytes = SplFixedArray::fromArray([32, 49, 205, 69, 42, 20, 0, 236, 17], false); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17); - $expected = SplFixedArray::fromArray( - [0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213], - false - ); - $this->assertEquals($expected, $ecBytes); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php deleted file mode 100644 index 46670fc..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php +++ /dev/null @@ -1,251 +0,0 @@ -assertSame( - 1 === $expected[$y][$x], - MaskUtil::getDataMaskBit($maskPattern, $x, $y) - ); - } - } - } - - public function testApplyMaskPenaltyRule1() : void - { - $matrix = new ByteMatrix(4, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule1($matrix)); - - // Horizontal - $matrix = new ByteMatrix(6, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - $matrix->set(4, 0, 0); - $matrix->set(5, 0, 1); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix)); - $matrix->set(5, 0, 0); - $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix)); - - // Vertical - $matrix = new ByteMatrix(1, 6); - $matrix->set(0, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(0, 3, 0); - $matrix->set(0, 4, 0); - $matrix->set(0, 5, 1); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix)); - $matrix->set(0, 5, 0); - $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix)); - } - - public function testApplyMaskPenaltyRule2() : void - { - $matrix = new ByteMatrix(1, 1); - $matrix->set(0, 0, 0); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(2, 2); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 1); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(2, 2); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 0); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(3, 3); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 0); - $matrix->set(2, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(1, 2, 0); - $matrix->set(2, 2, 0); - $this->assertSame(3 * 4, MaskUtil::applyMaskPenaltyRule2($matrix)); - } - - public function testApplyMaskPenalty3() : void - { - // Horizontal 00001011101 - $matrix = new ByteMatrix(11, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $matrix->set(6, 0, 1); - $matrix->set(7, 0, 1); - $matrix->set(8, 0, 1); - $matrix->set(9, 0, 0); - $matrix->set(10, 0, 1); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Horizontal 10111010000 - $matrix = new ByteMatrix(11, 1); - $matrix->set(0, 0, 1); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 1); - $matrix->set(3, 0, 1); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $matrix->set(6, 0, 1); - $matrix->set(7, 0, 0); - $matrix->set(8, 0, 0); - $matrix->set(9, 0, 0); - $matrix->set(10, 0, 0); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Vertical 00001011101 - $matrix = new ByteMatrix(1, 11); - $matrix->set(0, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(0, 3, 0); - $matrix->set(0, 4, 1); - $matrix->set(0, 5, 0); - $matrix->set(0, 6, 1); - $matrix->set(0, 7, 1); - $matrix->set(0, 8, 1); - $matrix->set(0, 9, 0); - $matrix->set(0, 10, 1); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Vertical 10111010000 - $matrix = new ByteMatrix(1, 11); - $matrix->set(0, 0, 1); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 1); - $matrix->set(0, 3, 1); - $matrix->set(0, 4, 1); - $matrix->set(0, 5, 0); - $matrix->set(0, 6, 1); - $matrix->set(0, 7, 0); - $matrix->set(0, 8, 0); - $matrix->set(0, 9, 0); - $matrix->set(0, 10, 0); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - } - - public function testApplyMaskPenaltyRule4() : void - { - // Dark cell ratio = 0% - $matrix = new ByteMatrix(1, 1); - $matrix->set(0, 0, 0); - $this->assertSame(100, MaskUtil::applyMaskPenaltyRule4($matrix)); - - // Dark cell ratio = 5% - $matrix = new ByteMatrix(2, 1); - $matrix->set(0, 0, 0); - $matrix->set(0, 0, 1); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule4($matrix)); - - // Dark cell ratio = 66.67% - $matrix = new ByteMatrix(6, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 1); - $matrix->set(2, 0, 1); - $matrix->set(3, 0, 1); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $this->assertSame(30, MaskUtil::applyMaskPenaltyRule4($matrix)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php deleted file mode 100644 index 106ceaa..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php +++ /dev/null @@ -1,335 +0,0 @@ -getMethods(ReflectionMethod::IS_STATIC) as $method) { - $method->setAccessible(true); - $this->methods[$method->getName()] = $method; - } - } - - public function testToString() : void - { - $matrix = new ByteMatrix(3, 3); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 1); - $matrix->set(2, 0, 0); - $matrix->set(0, 1, 1); - $matrix->set(1, 1, 0); - $matrix->set(2, 1, 1); - $matrix->set(0, 2, -1); - $matrix->set(1, 2, -1); - $matrix->set(2, 2, -1); - - $expected = " 0 1 0\n 1 0 1\n \n"; - $this->assertSame($expected, (string) $matrix); - } - - public function testClearMatrix() : void - { - $matrix = new ByteMatrix(2, 2); - MatrixUtil::clearMatrix($matrix); - - $this->assertSame(-1, $matrix->get(0, 0)); - $this->assertSame(-1, $matrix->get(1, 0)); - $this->assertSame(-1, $matrix->get(0, 1)); - $this->assertSame(-1, $matrix->get(1, 1)); - } - - public function testEmbedBasicPatterns1() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(1), - $matrix - ); - $expected = " 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 0 0 0 0 0 0 0 1 \n" - . " 1 1 1 1 1 1 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 1 1 1 1 1 1 0 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedBasicPatterns2() : void - { - $matrix = new ByteMatrix(25, 25); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(2), - $matrix - ); - $expected = " 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 1 1 1 1 1 \n" - . " 0 0 0 0 0 0 0 0 1 1 0 0 0 1 \n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 \n" - . " 1 0 0 0 0 0 1 0 1 0 0 0 1 \n" - . " 1 0 1 1 1 0 1 0 1 1 1 1 1 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 1 1 1 1 1 1 0 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedTypeInfo() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedTypeInfo']->invoke( - null, - ErrorCorrectionLevel::M(), - 5, - $matrix - ); - $expected = " 0 \n" - . " 1 \n" - . " 1 \n" - . " 1 \n" - . " 0 \n" - . " 0 \n" - . " \n" - . " 1 \n" - . " 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0\n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 1 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedVersionInfo() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['maybeEmbedVersionInfo']->invoke( - null, - Version::getVersionForNumber(7), - $matrix - ); - $expected = " 0 0 1 \n" - . " 0 1 0 \n" - . " 0 1 0 \n" - . " 0 1 1 \n" - . " 1 1 1 \n" - . " 0 0 0 \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " 0 0 0 0 1 0 \n" - . " 0 1 1 1 1 0 \n" - . " 1 0 0 1 1 0 \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedDataBits() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(1), - $matrix - ); - - $bits = new BitArray(); - $this->methods['embedDataBits']->invoke( - null, - $bits, - -1, - $matrix - ); - - $expected = " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testBuildMatrix() : void - { - $bytes = [ - 32, 65, 205, 69, 41, 220, 46, 128, 236, 42, 159, 74, 221, 244, 169, - 239, 150, 138, 70, 237, 85, 224, 96, 74, 219 , 61 - ]; - $bits = new BitArray(); - - foreach ($bytes as $byte) { - $bits->appendBits($byte, 8); - } - - $matrix = new ByteMatrix(21, 21); - MatrixUtil::buildMatrix( - $bits, - ErrorCorrectionLevel::H(), - Version::getVersionForNumber(1), - 3, - $matrix - ); - - $expected = " 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0\n" - . " 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0\n" - . " 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0\n" - . " 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0\n" - . " 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1\n" - . " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1\n" - . " 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0\n" - . " 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0\n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testFindMsbSet() : void - { - $this->assertSame(0, $this->methods['findMsbSet']->invoke(null, 0)); - $this->assertSame(1, $this->methods['findMsbSet']->invoke(null, 1)); - $this->assertSame(8, $this->methods['findMsbSet']->invoke(null, 0x80)); - $this->assertSame(32, $this->methods['findMsbSet']->invoke(null, 0x80000000)); - } - - public function testCalculateBchCode() : void - { - // Encoding of type information. - // From Appendix C in JISX0510:2004 (p 65) - $this->assertSame(0xdc, $this->methods['calculateBchCode']->invoke(null, 5, 0x537)); - // From http://www.swetake.com/qr/qr6.html - $this->assertSame(0x1c2, $this->methods['calculateBchCode']->invoke(null, 0x13, 0x537)); - // From http://www.swetake.com/qr/qr11.html - $this->assertSame(0x214, $this->methods['calculateBchCode']->invoke(null, 0x1b, 0x537)); - - // Encoding of version information. - // From Appendix D in JISX0510:2004 (p 68) - $this->assertSame(0xc94, $this->methods['calculateBchCode']->invoke(null, 7, 0x1f25)); - $this->assertSame(0x5bc, $this->methods['calculateBchCode']->invoke(null, 8, 0x1f25)); - $this->assertSame(0xa99, $this->methods['calculateBchCode']->invoke(null, 9, 0x1f25)); - $this->assertSame(0x4d3, $this->methods['calculateBchCode']->invoke(null, 10, 0x1f25)); - $this->assertSame(0x9a6, $this->methods['calculateBchCode']->invoke(null, 20, 0x1f25)); - $this->assertSame(0xd75, $this->methods['calculateBchCode']->invoke(null, 30, 0x1f25)); - $this->assertSame(0xc69, $this->methods['calculateBchCode']->invoke(null, 40, 0x1f25)); - } - - public function testMakeVersionInfoBits() : void - { - // From Appendix D in JISX0510:2004 (p 68) - $bits = new BitArray(); - $this->methods['makeVersionInfoBits']->invoke(null, Version::getVersionForNumber(7), $bits); - $this->assertSame(' ...XXXXX ..X..X.X ..', (string) $bits); - } - - public function testMakeTypeInfoBits() : void - { - // From Appendix D in JISX0510:2004 (p 68) - $bits = new BitArray(); - $this->methods['makeTypeInfoBits']->invoke(null, ErrorCorrectionLevel::M(), 5, $bits); - $this->assertSame(' X......X X..XXX.', (string) $bits); - } -} diff --git a/conlite/external/composer/ClassLoader.php b/conlite/external/composer/ClassLoader.php index 0cd6055..afef3fa 100644 --- a/conlite/external/composer/ClassLoader.php +++ b/conlite/external/composer/ClassLoader.php @@ -149,7 +149,7 @@ class ClassLoader /** * @return string[] Array of classname => path - * @psalm-var array + * @psalm-return array */ public function getClassMap() { diff --git a/conlite/external/composer/InstalledVersions.php b/conlite/external/composer/InstalledVersions.php index d50e0c9..41bc143 100644 --- a/conlite/external/composer/InstalledVersions.php +++ b/conlite/external/composer/InstalledVersions.php @@ -21,6 +21,8 @@ use Composer\Semver\VersionParser; * See also https://getcomposer.org/doc/07-runtime.md#installed-versions * * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final */ class InstalledVersions { diff --git a/conlite/external/composer/autoload_classmap.php b/conlite/external/composer/autoload_classmap.php index 0d872c1..65cba2c 100644 --- a/conlite/external/composer/autoload_classmap.php +++ b/conlite/external/composer/autoload_classmap.php @@ -2,7 +2,7 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( diff --git a/conlite/external/composer/autoload_namespaces.php b/conlite/external/composer/autoload_namespaces.php index 4a9c20b..f1ae7a0 100644 --- a/conlite/external/composer/autoload_namespaces.php +++ b/conlite/external/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( diff --git a/conlite/external/composer/autoload_psr4.php b/conlite/external/composer/autoload_psr4.php index abe8038..7359147 100644 --- a/conlite/external/composer/autoload_psr4.php +++ b/conlite/external/composer/autoload_psr4.php @@ -2,12 +2,11 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( + 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), 'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'), - 'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'), 'Conlite\\External\\' => array($vendorDir . ''), - 'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'), ); diff --git a/conlite/external/composer/autoload_real.php b/conlite/external/composer/autoload_real.php index e8f5631..522aa8a 100644 --- a/conlite/external/composer/autoload_real.php +++ b/conlite/external/composer/autoload_real.php @@ -25,30 +25,11 @@ class ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb require __DIR__ . '/platform_check.php'; spl_autoload_register(array('ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); spl_autoload_unregister(array('ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb', 'loadClassLoader')); - $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit4710875e1096bb659e0da9fbf88400bb::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInit4710875e1096bb659e0da9fbf88400bb::getInitializer($loader)); $loader->register(true); diff --git a/conlite/external/composer/autoload_static.php b/conlite/external/composer/autoload_static.php index 873b5d4..01b957d 100644 --- a/conlite/external/composer/autoload_static.php +++ b/conlite/external/composer/autoload_static.php @@ -7,41 +7,33 @@ namespace Composer\Autoload; class ComposerStaticInit4710875e1096bb659e0da9fbf88400bb { public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Component\\OptionsResolver\\' => 34, + ), 'E' => array ( 'Endroid\\QrCode\\' => 15, ), - 'D' => - array ( - 'DASPRiD\\Enum\\' => 13, - ), 'C' => array ( 'Conlite\\External\\' => 17, ), - 'B' => - array ( - 'BaconQrCode\\' => 12, - ), ); public static $prefixDirsPsr4 = array ( + 'Symfony\\Component\\OptionsResolver\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/options-resolver', + ), 'Endroid\\QrCode\\' => array ( 0 => __DIR__ . '/..' . '/endroid/qr-code/src', ), - 'DASPRiD\\Enum\\' => - array ( - 0 => __DIR__ . '/..' . '/dasprid/enum/src', - ), 'Conlite\\External\\' => array ( 0 => __DIR__ . '/../../..' . '/conlite/external', ), - 'BaconQrCode\\' => - array ( - 0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src', - ), ); public static $classMap = array ( diff --git a/conlite/external/composer/installed.json b/conlite/external/composer/installed.json index 079a2ef..6d9b7c0 100644 --- a/conlite/external/composer/installed.json +++ b/conlite/external/composer/installed.json @@ -1,147 +1,37 @@ { "packages": [ - { - "name": "bacon/bacon-qr-code", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0.3", - "ext-iconv": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "time": "2021-06-18T13:26:35+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "support": { - "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.4" - }, - "install-path": "../bacon/bacon-qr-code" - }, - { - "name": "dasprid/enum", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "time": "2020-10-02T16:03:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" - }, - "install-path": "../dasprid/enum" - }, { "name": "endroid/qr-code", - "version": "4.2.2", - "version_normalized": "4.2.2.0", + "version": "1.9.3", + "version_normalized": "1.9.3.0", "source": { "type": "git", "url": "https://github.com/endroid/qr-code.git", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78" + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code/zipball/53bfce79da95bf082484301fecbc1d77a3907f78", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/c9644bec2a9cc9318e98d1437de3c628dcd1ef93", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "php": "^7.3||^8.0" + "ext-gd": "*", + "php": ">=5.4", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "endroid/quality": "dev-master", - "ext-gd": "*", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" + "phpunit/phpunit": "^4.0|^5.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0" }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" - }, - "time": "2021-08-16T22:08:35+00:00", + "time": "2017-04-08T09:13:59+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } }, "installation-source": "dist", @@ -157,28 +47,24 @@ "authors": [ { "name": "Jeroen van den Enden", - "email": "info@endroid.nl" + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" } ], "description": "Endroid QR Code", - "homepage": "https://github.com/endroid/qr-code", + "homepage": "https://github.com/endroid/QrCode", "keywords": [ + "bundle", "code", "endroid", - "php", "qr", - "qrcode" + "qrcode", + "symfony" ], "support": { "issues": "https://github.com/endroid/qr-code/issues", - "source": "https://github.com/endroid/qr-code/tree/4.2.2" + "source": "https://github.com/endroid/qr-code/tree/1.9.3" }, - "funding": [ - { - "url": "https://github.com/endroid", - "type": "github" - } - ], "install-path": "../endroid/qr-code" }, { @@ -278,6 +164,75 @@ } ], "install-path": "../phpmailer/phpmailer" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2020-10-24T10:57:07+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/options-resolver" } ], "dev": false, diff --git a/conlite/external/composer/platform_check.php b/conlite/external/composer/platform_check.php index 92370c5..d673084 100644 --- a/conlite/external/composer/platform_check.php +++ b/conlite/external/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70300)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 50509)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 5.5.9". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/conlite/external/dasprid/enum/LICENSE b/conlite/external/dasprid/enum/LICENSE deleted file mode 100644 index d45a356..0000000 --- a/conlite/external/dasprid/enum/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017, Ben Scholzen 'DASPRiD' -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/conlite/external/dasprid/enum/README.md b/conlite/external/dasprid/enum/README.md deleted file mode 100644 index 9e9ca12..0000000 --- a/conlite/external/dasprid/enum/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# PHP 7.1 enums - -[![Build Status](https://travis-ci.org/DASPRiD/Enum.svg?branch=master)](https://travis-ci.org/DASPRiD/Enum) -[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master) -[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum) -[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum) -[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum) - -It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation -which is only available as a PECL extension. There are also quite a few other userland enum implementations around, -but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to. - -## Usage - -### Basics - -At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other -enum implementation you might know. The first clear difference is that you should define all the constants as protected -(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference -is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MONDAY() - * @method static self TUESDAY() - * @method static self WEDNESDAY() - * @method static self THURSDAY() - * @method static self FRIDAY() - * @method static self SATURDAY() - * @method static self SUNDAY() - */ -final class WeekDay extends AbstractEnum -{ - protected const MONDAY = null; - protected const TUESDAY = null; - protected const WEDNESDAY = null; - protected const THURSDAY = null; - protected const FRIDAY = null; - protected const SATURDAY = null; - protected const SUNDAY = null; -} -``` - -If you need to provide constants for either internal use or public use, you can mark them as either private or public, -in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can -see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will -automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like -that: - -```php -function tellItLikeItIs(WeekDay $weekDay) -{ - switch ($weekDay) { - case WeekDay::MONDAY(): - echo 'Mondays are bad.'; - break; - - case WeekDay::FRIDAY(): - echo 'Fridays are better.'; - break; - - case WeekDay::SATURDAY(): - case WeekDay::SUNDAY(): - echo 'Weekends are best.'; - break; - - default: - echo 'Midweek days are so-so.'; - } -} - -tellItLikeItIs(WeekDay::MONDAY()); -tellItLikeItIs(WeekDay::WEDNESDAY()); -tellItLikeItIs(WeekDay::FRIDAY()); -tellItLikeItIs(WeekDay::SATURDAY()); -tellItLikeItIs(WeekDay::SUNDAY()); -``` - -### More complex example - -Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always -just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at -a more complex example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MERCURY() - * @method static self VENUS() - * @method static self EARTH() - * @method static self MARS() - * @method static self JUPITER() - * @method static self SATURN() - * @method static self URANUS() - * @method static self NEPTUNE() - */ -final class Planet extends AbstractEnum -{ - protected const MERCURY = [3.303e+23, 2.4397e6]; - protected const VENUS = [4.869e+24, 6.0518e6]; - protected const EARTH = [5.976e+24, 6.37814e6]; - protected const MARS = [6.421e+23, 3.3972e6]; - protected const JUPITER = [1.9e+27, 7.1492e7]; - protected const SATURN = [5.688e+26, 6.0268e7]; - protected const URANUS = [8.686e+25, 2.5559e7]; - protected const NEPTUNE = [1.024e+26, 2.4746e7]; - - /** - * Universal gravitational constant. - * - * @var float - */ - private const G = 6.67300E-11; - - /** - * Mass in kilograms. - * - * @var float - */ - private $mass; - - /** - * Radius in meters. - * - * @var float - */ - private $radius; - - protected function __construct(float $mass, float $radius) - { - $this->mass = $mass; - $this->radius = $radius; - } - - public function mass() : float - { - return $this->mass; - } - - public function radius() : float - { - return $this->radius; - } - - public function surfaceGravity() : float - { - return self::G * $this->mass / ($this->radius * $this->radius); - } - - public function surfaceWeight(float $otherMass) : float - { - return $otherMass * $this->surfaceGravity(); - } -} - -$myMass = 80; - -foreach (Planet::values() as $planet) { - printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); -} -``` diff --git a/conlite/external/dasprid/enum/composer.json b/conlite/external/dasprid/enum/composer.json deleted file mode 100644 index b3d745a..0000000 --- a/conlite/external/dasprid/enum/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "dasprid/enum", - "description": "PHP 7.1 enum implementation", - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "keywords": [ - "enum", - "map" - ], - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "DASPRiD\\EnumTest\\": "test/" - } - } -} diff --git a/conlite/external/dasprid/enum/phpunit.xml.dist b/conlite/external/dasprid/enum/phpunit.xml.dist deleted file mode 100644 index 307a430..0000000 --- a/conlite/external/dasprid/enum/phpunit.xml.dist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./test - - - - - - src - - - diff --git a/conlite/external/dasprid/enum/src/AbstractEnum.php b/conlite/external/dasprid/enum/src/AbstractEnum.php deleted file mode 100644 index 79fe81c..0000000 --- a/conlite/external/dasprid/enum/src/AbstractEnum.php +++ /dev/null @@ -1,241 +0,0 @@ -> - */ - private static $values = []; - - /** - * @var array - */ - private static $allValuesLoaded = []; - - /** - * @var array - */ - private static $constants = []; - - /** - * The constructor is private by default to avoid arbitrary enum creation. - * - * When creating your own constructor for a parameterized enum, make sure to declare it as protected, so that - * the static methods are able to construct it. Avoid making it public, as that would allow creation of - * non-singleton enum instances. - */ - private function __construct() - { - } - - /** - * Magic getter which forwards all calls to {@see self::valueOf()}. - * - * @return static - */ - final public static function __callStatic(string $name, array $arguments) : self - { - return static::valueOf($name); - } - - /** - * Returns an enum with the specified name. - * - * The name must match exactly an identifier used to declare an enum in this type (extraneous whitespace characters - * are not permitted). - * - * @return static - * @throws IllegalArgumentException if the enum has no constant with the specified name - */ - final public static function valueOf(string $name) : self - { - if (isset(self::$values[static::class][$name])) { - return self::$values[static::class][$name]; - } - - $constants = self::constants(); - - if (array_key_exists($name, $constants)) { - return self::createValue($name, $constants[$name][0], $constants[$name][1]); - } - - throw new IllegalArgumentException(sprintf('No enum constant %s::%s', static::class, $name)); - } - - /** - * @return static - */ - private static function createValue(string $name, int $ordinal, array $arguments) : self - { - $instance = new static(...$arguments); - $instance->name = $name; - $instance->ordinal = $ordinal; - self::$values[static::class][$name] = $instance; - return $instance; - } - - /** - * Obtains all possible types defined by this enum. - * - * @return static[] - */ - final public static function values() : array - { - if (isset(self::$allValuesLoaded[static::class])) { - return self::$values[static::class]; - } - - if (! isset(self::$values[static::class])) { - self::$values[static::class] = []; - } - - foreach (self::constants() as $name => $constant) { - if (array_key_exists($name, self::$values[static::class])) { - continue; - } - - static::createValue($name, $constant[0], $constant[1]); - } - - uasort(self::$values[static::class], function (self $a, self $b) { - return $a->ordinal() <=> $b->ordinal(); - }); - - self::$allValuesLoaded[static::class] = true; - return self::$values[static::class]; - } - - private static function constants() : array - { - if (isset(self::$constants[static::class])) { - return self::$constants[static::class]; - } - - self::$constants[static::class] = []; - $reflectionClass = new ReflectionClass(static::class); - $ordinal = -1; - - foreach ($reflectionClass->getReflectionConstants() as $reflectionConstant) { - if (! $reflectionConstant->isProtected()) { - continue; - } - - $value = $reflectionConstant->getValue(); - - self::$constants[static::class][$reflectionConstant->name] = [ - ++$ordinal, - is_array($value) ? $value : [] - ]; - } - - return self::$constants[static::class]; - } - - /** - * Returns the name of this enum constant, exactly as declared in its enum declaration. - * - * Most programmers should use the {@see self::__toString()} method in preference to this one, as the toString - * method may return a more user-friendly name. This method is designed primarily for use in specialized situations - * where correctness depends on getting the exact name, which will not vary from release to release. - */ - final public function name() : string - { - return $this->name; - } - - /** - * Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial - * constant is assigned an ordinal of zero). - * - * Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data - * structures. - */ - final public function ordinal() : int - { - return $this->ordinal; - } - - /** - * Compares this enum with the specified object for order. - * - * Returns negative integer, zero or positive integer as this object is less than, equal to or greater than the - * specified object. - * - * Enums are only comparable to other enums of the same type. The natural order implemented by this method is the - * order in which the constants are declared. - * - * @throws MismatchException if the passed enum is not of the same type - */ - final public function compareTo(self $other) : int - { - if (! $other instanceof static) { - throw new MismatchException(sprintf( - 'The passed enum %s is not of the same type as %s', - get_class($other), - static::class - )); - } - - return $this->ordinal - $other->ordinal; - } - - /** - * Forbid cloning enums. - * - * @throws CloneNotSupportedException - */ - final public function __clone() - { - throw new CloneNotSupportedException(); - } - - /** - * Forbid serializing enums. - * - * @throws SerializeNotSupportedException - */ - final public function __sleep() : array - { - throw new SerializeNotSupportedException(); - } - - /** - * Forbid unserializing enums. - * - * @throws UnserializeNotSupportedException - */ - final public function __wakeup() : void - { - throw new UnserializeNotSupportedException(); - } - - /** - * Turns the enum into a string representation. - * - * You may override this method to give a more user-friendly version. - */ - public function __toString() : string - { - return $this->name; - } -} diff --git a/conlite/external/dasprid/enum/src/EnumMap.php b/conlite/external/dasprid/enum/src/EnumMap.php deleted file mode 100644 index 77c5f35..0000000 --- a/conlite/external/dasprid/enum/src/EnumMap.php +++ /dev/null @@ -1,375 +0,0 @@ - - */ - private $keyUniverse; - - /** - * Array representation of this map. The ith element is the value to which universe[i] is currently mapped, or null - * if it isn't mapped to anything, or NullValue if it's mapped to null. - * - * @var array - */ - private $values; - - /** - * @var int - */ - private $size = 0; - - /** - * Creates a new enum map. - * - * @param string $keyType the type of the keys, must extend AbstractEnum - * @param string $valueType the type of the values - * @param bool $allowNullValues whether to allow null values - * @throws IllegalArgumentException when key type does not extend AbstractEnum - */ - public function __construct(string $keyType, string $valueType, bool $allowNullValues) - { - if (! is_subclass_of($keyType, AbstractEnum::class)) { - throw new IllegalArgumentException(sprintf( - 'Class %s does not extend %s', - $keyType, - AbstractEnum::class - )); - } - - $this->keyType = $keyType; - $this->valueType = $valueType; - $this->allowNullValues = $allowNullValues; - $this->keyUniverse = $keyType::values(); - $this->values = array_fill(0, count($this->keyUniverse), null); - } - - /** - * Checks whether the map types match the supplied ones. - * - * You should call this method when an EnumMap is passed to you and you want to ensure that it's made up of the - * correct types. - * - * @throws ExpectationException when supplied key type mismatches local key type - * @throws ExpectationException when supplied value type mismatches local value type - * @throws ExpectationException when the supplied map allows null values, abut should not - */ - public function expect(string $keyType, string $valueType, bool $allowNullValues) : void - { - if ($keyType !== $this->keyType) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with key type %s, but got %s', - $keyType, - $this->keyType - )); - } - - if ($valueType !== $this->valueType) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with value type %s, but got %s', - $keyType, - $this->keyType - )); - } - - if ($allowNullValues !== $this->allowNullValues) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with nullable flag %s, but got %s', - ($allowNullValues ? 'true' : 'false'), - ($this->allowNullValues ? 'true' : 'false') - )); - } - } - - /** - * Returns the number of key-value mappings in this map. - */ - public function size() : int - { - return $this->size; - } - - /** - * Returns true if this map maps one or more keys to the specified value. - */ - public function containsValue($value) : bool - { - return in_array($this->maskNull($value), $this->values, true); - } - - /** - * Returns true if this map contains a mapping for the specified key. - */ - public function containsKey(AbstractEnum $key) : bool - { - $this->checkKeyType($key); - return null !== $this->values[$key->ordinal()]; - } - - /** - * Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. - * - * More formally, if this map contains a mapping from a key to a value, then this method returns the value; - * otherwise it returns null (there can be at most one such mapping). - * - * A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also - * possible that hte map explicitly maps the key to null. The {@see self::containsKey()} operation may be used to - * distinguish these two cases. - * - * @return mixed - */ - public function get(AbstractEnum $key) - { - $this->checkKeyType($key); - return $this->unmaskNull($this->values[$key->ordinal()]); - } - - /** - * Associates the specified value with the specified key in this map. - * - * If the map previously contained a mapping for this key, the old value is replaced. - * - * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. - * (a null return can also indicate that the map previously associated null with the specified key.) - * @throws IllegalArgumentException when the passed values does not match the internal value type - */ - public function put(AbstractEnum $key, $value) - { - $this->checkKeyType($key); - - if (! $this->isValidValue($value)) { - throw new IllegalArgumentException(sprintf('Value is not of type %s', $this->valueType)); - } - - $index = $key->ordinal(); - $oldValue = $this->values[$index]; - $this->values[$index] = $this->maskNull($value); - - if (null === $oldValue) { - ++$this->size; - } - - return $this->unmaskNull($oldValue); - } - - /** - * Removes the mapping for this key frm this map if present. - * - * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. - * (a null return can also indicate that the map previously associated null with the specified key.) - */ - public function remove(AbstractEnum $key) - { - $this->checkKeyType($key); - - $index = $key->ordinal(); - $oldValue = $this->values[$index]; - $this->values[$index] = null; - - if (null !== $oldValue) { - --$this->size; - } - - return $this->unmaskNull($oldValue); - } - - /** - * Removes all mappings from this map. - */ - public function clear() : void - { - $this->values = array_fill(0, count($this->keyUniverse), null); - $this->size = 0; - } - - /** - * Compares the specified map with this map for quality. - * - * Returns true if the two maps represent the same mappings. - */ - public function equals(self $other) : bool - { - if ($this === $other) { - return true; - } - - if ($this->size !== $other->size) { - return false; - } - - return $this->values === $other->values; - } - - /** - * Returns the values contained in this map. - * - * The array will contain the values in the order their corresponding keys appear in the map, which is their natural - * order (the order in which the num constants are declared). - */ - public function values() : array - { - return array_values(array_map(function ($value) { - return $this->unmaskNull($value); - }, array_filter($this->values, function ($value) : bool { - return null !== $value; - }))); - } - - public function serialize() : string - { - $values = []; - - foreach ($this->values as $ordinal => $value) { - if (null === $value) { - continue; - } - - $values[$ordinal] = $this->unmaskNull($value); - } - - return serialize([ - 'keyType' => $this->keyType, - 'valueType' => $this->valueType, - 'allowNullValues' => $this->allowNullValues, - 'values' => $values, - ]); - } - - public function unserialize($serialized) : void - { - $data = unserialize($serialized); - $this->__construct($data['keyType'], $data['valueType'], $data['allowNullValues']); - - foreach ($this->keyUniverse as $key) { - if (array_key_exists($key->ordinal(), $data['values'])) { - $this->put($key, $data['values'][$key->ordinal()]); - } - } - } - - public function getIterator() : Traversable - { - foreach ($this->keyUniverse as $key) { - if (null === $this->values[$key->ordinal()]) { - continue; - } - - yield $key => $this->unmaskNull($this->values[$key->ordinal()]); - } - } - - private function maskNull($value) - { - if (null === $value) { - return NullValue::instance(); - } - - return $value; - } - - private function unmaskNull($value) - { - if ($value instanceof NullValue) { - return null; - } - - return $value; - } - - /** - * @throws IllegalArgumentException when the passed key does not match the internal key type - */ - private function checkKeyType(AbstractEnum $key) : void - { - if (get_class($key) !== $this->keyType) { - throw new IllegalArgumentException(sprintf( - 'Object of type %s is not the same type as %s', - get_class($key), - $this->keyType - )); - } - } - - private function isValidValue($value) : bool - { - if (null === $value) { - if ($this->allowNullValues) { - return true; - } - - return false; - } - - switch ($this->valueType) { - case 'mixed': - return true; - - case 'bool': - case 'boolean': - return is_bool($value); - - case 'int': - case 'integer': - return is_int($value); - - case 'float': - case 'double': - return is_float($value); - - case 'string': - return is_string($value); - - case 'object': - return is_object($value); - - case 'array': - return is_array($value); - } - - return $value instanceof $this->valueType; - } -} diff --git a/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php b/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php deleted file mode 100644 index 4b37dbe..0000000 --- a/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php +++ /dev/null @@ -1,10 +0,0 @@ -getProperty('constants'); - $constantsProperty->setAccessible(true); - $constantsProperty->setValue([]); - - $valuesProperty = $reflectionClass->getProperty('values'); - $valuesProperty->setAccessible(true); - $valuesProperty->setValue([]); - - $allValuesLoadedProperty = $reflectionClass->getProperty('allValuesLoaded'); - $allValuesLoadedProperty->setAccessible(true); - $allValuesLoadedProperty->setValue([]); - } - - public function testToString() : void - { - $weekday = WeekDay::FRIDAY(); - self::assertSame('FRIDAY', (string) $weekday); - } - - public function testName() : void - { - $this->assertSame('WEDNESDAY', WeekDay::WEDNESDAY()->name()); - } - - public function testOrdinal() : void - { - $this->assertSame(2, WeekDay::WEDNESDAY()->ordinal()); - } - - public function testSameInstanceIsReturned() : void - { - self::assertSame(WeekDay::FRIDAY(), WeekDay::FRIDAY()); - } - - public static function testValueOf() : void - { - self::assertSame(WeekDay::FRIDAY(), WeekDay::valueOf('FRIDAY')); - } - - public function testValueOfInvalidConstant() : void - { - $this->expectException(IllegalArgumentException::class); - WeekDay::valueOf('CATURDAY'); - } - - public function testExceptionOnCloneAttempt() : void - { - $this->expectException(CloneNotSupportedException::class); - clone WeekDay::FRIDAY(); - } - - public function testExceptionOnSerializeAttempt() : void - { - $this->expectException(SerializeNotSupportedException::class); - serialize(WeekDay::FRIDAY()); - } - - public function testExceptionOnUnserializeAttempt() : void - { - $this->expectException(UnserializeNotSupportedException::class); - unserialize('O:24:"DASPRiD\\EnumTest\\WeekDay":0:{}'); - } - - public function testReturnValueOfValuesIsSortedByOrdinal() : void - { - // Initialize some week days out of order - WeekDay::SATURDAY(); - WeekDay::TUESDAY(); - - $ordinals = array_values(array_map(function (WeekDay $weekDay) : int { - return $weekDay->ordinal(); - }, WeekDay::values())); - - self::assertSame([0, 1, 2, 3, 4, 5, 6], $ordinals); - - $cachedOrdinals = array_values(array_map(function (WeekDay $weekDay) : int { - return $weekDay->ordinal(); - }, WeekDay::values())); - $this->assertSame($ordinals, $cachedOrdinals); - } - - public function testCompareTo() : void - { - $this->assertSame(-4, WeekDay::WEDNESDAY()->compareTo(WeekDay::SUNDAY())); - $this->assertSame(4, WeekDay::SUNDAY()->compareTo(WeekDay::WEDNESDAY())); - $this->assertSame(0, WeekDay::WEDNESDAY()->compareTo(WeekDay::WEDNESDAY())); - } - - public function testCompareToWrongEnum() : void - { - $this->expectException(MismatchException::class); - WeekDay::MONDAY()->compareTo(Planet::EARTH()); - } - - public function testParameterizedEnum() : void - { - $planet = Planet::EARTH(); - $this->assertSame(5.976e+24, $planet->mass()); - $this->assertSame(6.37814e6, $planet->radius()); - } -} diff --git a/conlite/external/dasprid/enum/test/EnumMapTest.php b/conlite/external/dasprid/enum/test/EnumMapTest.php deleted file mode 100644 index d51a86c..0000000 --- a/conlite/external/dasprid/enum/test/EnumMapTest.php +++ /dev/null @@ -1,243 +0,0 @@ -expectException(IllegalArgumentException::class); - new EnumMap(stdClass::class, 'string', false); - } - - public function testUnexpectedKeyType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', false); - $map->expect(Planet::class, 'string', false); - } - - public function testUnexpectedValueType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', false); - $map->expect(WeekDay::class, 'int', false); - } - - public function testUnexpectedNullableValueType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', true); - $map->expect(WeekDay::class, 'string', false); - } - - public function testExpectedTypes() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->expect(WeekDay::class, 'string', true); - $this->addToAssertionCount(1); - } - - public function testSize() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertSame(0, $map->size()); - $map->put(WeekDay::MONDAY(), 'foo'); - $this->assertSame(1, $map->size()); - } - - public function testContainsValue() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertFalse($map->containsValue('foo')); - $map->put(WeekDay::TUESDAY(), 'foo'); - $this->assertTrue($map->containsValue('foo')); - $this->assertFalse($map->containsValue(null)); - $map->put(WeekDay::WEDNESDAY(), null); - $this->assertTrue($map->containsValue(null)); - } - - public function testContainsKey() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertFalse($map->containsKey(WeekDay::TUESDAY())); - $map->put(WeekDay::TUESDAY(), 'foo'); - $this->assertTrue($map->containsKey(WeekDay::TUESDAY())); - $map->put(WeekDay::WEDNESDAY(), null); - $this->assertTrue($map->containsKey(WeekDay::WEDNESDAY())); - } - - public function testPutAndGet() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->put(WeekDay::FRIDAY(), null); - $this->assertSame('foo', $map->get(WeekDay::TUESDAY())); - $this->assertSame(null, $map->get(WeekDay::WEDNESDAY())); - $this->assertSame(null, $map->get(WeekDay::FRIDAY())); - } - - public function testPutInvalidKey() : void - { - $this->expectException(IllegalArgumentException::class); - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(Planet::MARS(), 'foo'); - } - - public function invalidValues() : array - { - return [ - ['bool', null, false], - ['bool', 0], - ['boolean', 0], - ['int', 2.4], - ['integer', 5.3], - ['float', 3], - ['double', 7], - ['string', 1], - ['object', 1], - ['array', 1], - [stdClass::class, 1], - ]; - } - - /** - * @dataProvider invalidValues - * @param mixed $value - */ - public function testPutInvalidValue(string $valueType, $value, bool $allowNull = true) : void - { - $this->expectException(IllegalArgumentException::class); - $map = new EnumMap(WeekDay::class, $valueType, $allowNull); - $map->put(WeekDay::TUESDAY(), $value); - } - - public function validValues() : array - { - return [ - ['bool', null], - ['mixed', 'foo'], - ['mixed', 1], - ['mixed', new stdClass()], - ['bool', true], - ['boolean', false], - ['int', 1], - ['integer', 4], - ['float', 2.5], - ['double', 6.4], - ['string', 'foo'], - ['object', new stdClass()], - ['array', ['foo']], - [stdClass::class, new stdClass()], - ]; - } - - /** - * @dataProvider validValues - * @param mixed $value - */ - public function testPutValidValue(string $valueType, $value, bool $allowNull = true) : void - { - $map = new EnumMap(WeekDay::class, $valueType, $allowNull); - $map->put(WeekDay::TUESDAY(), $value); - $this->addToAssertionCount(1); - } - - public function testRemove() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->remove(WeekDay::TUESDAY()); - $map->remove(WeekDay::WEDNESDAY()); - $this->assertSame(null, $map->get(WeekDay::TUESDAY())); - $this->assertSame(0, $map->size()); - } - - public function testClear() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->clear(); - $this->assertSame(null, $map->get(WeekDay::TUESDAY())); - $this->assertSame(0, $map->size()); - } - - public function testEqualsWithSameInstance() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertTrue($map->equals($map)); - } - - public function testEqualsWithDifferentSize() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::MONDAY(), 'foo'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testEqualsWithDifferentValues() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::MONDAY(), 'bar'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testEqualsWithDifferentConstants() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::TUESDAY(), 'foo'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testValues() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertSame([], $map->values()); - - $map->put(WeekDay::FRIDAY(), 'foo'); - $map->put(WeekDay::TUESDAY(), 'bar'); - $map->put(WeekDay::SUNDAY(), null); - - $this->assertSame(['bar', 'foo', null], $map->values()); - } - - public function testSerializeAndUnserialize() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = unserialize(serialize($mapA)); - - $this->assertTrue($mapA->equals($mapB)); - } - - public function testIterator() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::FRIDAY(), 'foo'); - $map->put(WeekDay::TUESDAY(), 'bar'); - $map->put(WeekDay::SUNDAY(), null); - - $result = []; - - foreach ($map as $key => $value) { - $result[$key->ordinal()] = $value; - } - - $this->assertSame([1 => 'bar', 4 => 'foo', 6 => null], $result); - } -} diff --git a/conlite/external/dasprid/enum/test/NullValueTest.php b/conlite/external/dasprid/enum/test/NullValueTest.php deleted file mode 100644 index 9f70640..0000000 --- a/conlite/external/dasprid/enum/test/NullValueTest.php +++ /dev/null @@ -1,31 +0,0 @@ -expectException(CloneNotSupportedException::class); - clone NullValue::instance(); - } - - public function testExceptionOnSerializeAttempt() : void - { - $this->expectException(SerializeNotSupportedException::class); - serialize(NullValue::instance()); - } - - public function testExceptionOnUnserializeAttempt() : void - { - $this->expectException(UnserializeNotSupportedException::class); - unserialize('O:22:"DASPRiD\\Enum\\NullValue":0:{}'); - } -} diff --git a/conlite/external/dasprid/enum/test/Planet.php b/conlite/external/dasprid/enum/test/Planet.php deleted file mode 100644 index 3c44c1d..0000000 --- a/conlite/external/dasprid/enum/test/Planet.php +++ /dev/null @@ -1,73 +0,0 @@ -mass = $mass; - $this->radius = $radius; - } - - public function mass() : float - { - return $this->mass; - } - - public function radius() : float - { - return $this->radius; - } - - public function surfaceGravity() : float - { - return self::G * $this->mass / ($this->radius * $this->radius); - } - - public function surfaceWeight(float $otherMass) : float - { - return $otherMass * $this->surfaceGravity(); - } -} diff --git a/conlite/external/dasprid/enum/test/WeekDay.php b/conlite/external/dasprid/enum/test/WeekDay.php deleted file mode 100644 index 70b8db5..0000000 --- a/conlite/external/dasprid/enum/test/WeekDay.php +++ /dev/null @@ -1,26 +0,0 @@ -=5.4", + "ext-gd": "*", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "ext-gd": "*", - "endroid/quality": "dev-master", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" - }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0", + "sensio/framework-extra-bundle": "^3.0", + "phpunit/phpunit": "^4.0|^5.0" }, "autoload": { "psr-4": { @@ -38,11 +35,11 @@ } }, "config": { - "sort-packages": true + "bin-dir": "bin" }, "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } } } diff --git a/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php b/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php deleted file mode 100644 index 90f23e0..0000000 --- a/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php +++ /dev/null @@ -1,30 +0,0 @@ -getErrorCorrectionLevel()); - $baconMatrix = Encoder::encode($qrCode->getData(), $baconErrorCorrectionLevel, strval($qrCode->getEncoding()))->getMatrix(); - - $blockValues = []; - $columnCount = $baconMatrix->getWidth(); - $rowCount = $baconMatrix->getHeight(); - for ($rowIndex = 0; $rowIndex < $rowCount; ++$rowIndex) { - $blockValues[$rowIndex] = []; - for ($columnIndex = 0; $columnIndex < $columnCount; ++$columnIndex) { - $blockValues[$rowIndex][$columnIndex] = $baconMatrix->get($columnIndex, $rowIndex); - } - } - - return new Matrix($blockValues, $qrCode->getSize(), $qrCode->getMargin(), $qrCode->getRoundBlockSizeMode()); - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/Builder.php b/conlite/external/endroid/qr-code/src/Builder/Builder.php deleted file mode 100644 index 6e5ab03..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/Builder.php +++ /dev/null @@ -1,255 +0,0 @@ - */ - private $options; - - public function __construct() - { - $this->options = [ - 'writer' => new PngWriter(), - 'writerOptions' => [], - 'qrCodeClass' => QrCode::class, - 'logoClass' => Logo::class, - 'labelClass' => Label::class, - 'validateResult' => false, - ]; - } - - public static function create(): BuilderInterface - { - return new self(); - } - - public function writer(WriterInterface $writer): BuilderInterface - { - $this->options['writer'] = $writer; - - return $this; - } - - /** @param array $writerOptions */ - public function writerOptions(array $writerOptions): BuilderInterface - { - $this->options['writerOptions'] = $writerOptions; - - return $this; - } - - public function data(string $data): BuilderInterface - { - $this->options['data'] = $data; - - return $this; - } - - public function encoding(EncodingInterface $encoding): BuilderInterface - { - $this->options['encoding'] = $encoding; - - return $this; - } - - public function errorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): BuilderInterface - { - $this->options['errorCorrectionLevel'] = $errorCorrectionLevel; - - return $this; - } - - public function size(int $size): BuilderInterface - { - $this->options['size'] = $size; - - return $this; - } - - public function margin(int $margin): BuilderInterface - { - $this->options['margin'] = $margin; - - return $this; - } - - public function roundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): BuilderInterface - { - $this->options['roundBlockSizeMode'] = $roundBlockSizeMode; - - return $this; - } - - public function foregroundColor(ColorInterface $foregroundColor): BuilderInterface - { - $this->options['foregroundColor'] = $foregroundColor; - - return $this; - } - - public function backgroundColor(ColorInterface $backgroundColor): BuilderInterface - { - $this->options['backgroundColor'] = $backgroundColor; - - return $this; - } - - public function logoPath(string $logoPath): BuilderInterface - { - $this->options['logoPath'] = $logoPath; - - return $this; - } - - public function logoResizeToWidth(int $logoResizeToWidth): BuilderInterface - { - $this->options['logoResizeToWidth'] = $logoResizeToWidth; - - return $this; - } - - public function logoResizeToHeight(int $logoResizeToHeight): BuilderInterface - { - $this->options['logoResizeToHeight'] = $logoResizeToHeight; - - return $this; - } - - public function logoPunchoutBackground(bool $logoPunchoutBackground): BuilderInterface - { - $this->options['logoPunchoutBackground'] = $logoPunchoutBackground; - - return $this; - } - - public function labelText(string $labelText): BuilderInterface - { - $this->options['labelText'] = $labelText; - - return $this; - } - - public function labelFont(FontInterface $labelFont): BuilderInterface - { - $this->options['labelFont'] = $labelFont; - - return $this; - } - - public function labelAlignment(LabelAlignmentInterface $labelAlignment): BuilderInterface - { - $this->options['labelAlignment'] = $labelAlignment; - - return $this; - } - - public function labelMargin(MarginInterface $labelMargin): BuilderInterface - { - $this->options['labelMargin'] = $labelMargin; - - return $this; - } - - public function labelTextColor(ColorInterface $labelTextColor): BuilderInterface - { - $this->options['labelTextColor'] = $labelTextColor; - - return $this; - } - - public function validateResult(bool $validateResult): BuilderInterface - { - $this->options['validateResult'] = $validateResult; - - return $this; - } - - public function build(): ResultInterface - { - if (!isset($this->options['writer']) || !$this->options['writer'] instanceof WriterInterface) { - throw new \Exception('Pass a valid writer via $builder->writer()'); - } - - $writer = $this->options['writer']; - - if ($this->options['validateResult'] && !$writer instanceof ValidatingWriterInterface) { - throw new \Exception('Unable to validate result with '.get_class($writer)); - } - - /** @var QrCode $qrCode */ - $qrCode = $this->buildObject($this->options['qrCodeClass']); - - /** @var LogoInterface|null $logo */ - $logo = $this->buildObject($this->options['logoClass'], 'logo'); - - /** @var LabelInterface|null $label */ - $label = $this->buildObject($this->options['labelClass'], 'label'); - - $result = $writer->write($qrCode, $logo, $label, $this->options['writerOptions']); - - if ($this->options['validateResult'] && $writer instanceof ValidatingWriterInterface) { - $writer->validateResult($result, $qrCode->getData()); - } - - return $result; - } - - /** - * @param class-string $class - * - * @return mixed - */ - private function buildObject(string $class, string $optionsPrefix = null) - { - /** @var \ReflectionClass $reflectionClass */ - $reflectionClass = new \ReflectionClass($class); - - $arguments = []; - $hasBuilderOptions = false; - $missingRequiredArguments = []; - /** @var \ReflectionMethod $constructor */ - $constructor = $reflectionClass->getConstructor(); - $constructorParameters = $constructor->getParameters(); - foreach ($constructorParameters as $parameter) { - $optionName = null === $optionsPrefix ? $parameter->getName() : $optionsPrefix.ucfirst($parameter->getName()); - if (isset($this->options[$optionName])) { - $hasBuilderOptions = true; - $arguments[] = $this->options[$optionName]; - } elseif ($parameter->isDefaultValueAvailable()) { - $arguments[] = $parameter->getDefaultValue(); - } else { - $missingRequiredArguments[] = $optionName; - } - } - - if (!$hasBuilderOptions) { - return null; - } - - if (count($missingRequiredArguments) > 0) { - throw new \Exception(sprintf('Missing required arguments: %s', implode(', ', $missingRequiredArguments))); - } - - return $reflectionClass->newInstanceArgs($arguments); - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php b/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php deleted file mode 100644 index 5e69bc2..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php +++ /dev/null @@ -1,63 +0,0 @@ - $writerOptions */ - public function writerOptions(array $writerOptions): BuilderInterface; - - public function data(string $data): BuilderInterface; - - public function encoding(EncodingInterface $encoding): BuilderInterface; - - public function errorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): BuilderInterface; - - public function size(int $size): BuilderInterface; - - public function margin(int $margin): BuilderInterface; - - public function roundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): BuilderInterface; - - public function foregroundColor(ColorInterface $foregroundColor): BuilderInterface; - - public function backgroundColor(ColorInterface $backgroundColor): BuilderInterface; - - public function logoPath(string $logoPath): BuilderInterface; - - public function logoResizeToWidth(int $logoResizeToWidth): BuilderInterface; - - public function logoResizeToHeight(int $logoResizeToHeight): BuilderInterface; - - public function logoPunchoutBackground(bool $logoPunchoutBackground): BuilderInterface; - - public function labelText(string $labelText): BuilderInterface; - - public function labelFont(FontInterface $labelFont): BuilderInterface; - - public function labelAlignment(LabelAlignmentInterface $labelAlignment): BuilderInterface; - - public function labelMargin(MarginInterface $labelMargin): BuilderInterface; - - public function labelTextColor(ColorInterface $labelTextColor): BuilderInterface; - - public function validateResult(bool $validateResult): BuilderInterface; - - public function build(): ResultInterface; -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php b/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php deleted file mode 100644 index eb9666a..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php +++ /dev/null @@ -1,25 +0,0 @@ - */ - private $builders = []; - - public function getBuilder(string $name): BuilderInterface - { - if (!isset($this->builders[$name])) { - throw new \Exception(sprintf('Builder with name "%s" not available from registry', $name)); - } - - return $this->builders[$name]; - } - - public function addBuilder(string $name, BuilderInterface $builder): void - { - $this->builders[$name] = $builder; - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php b/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php deleted file mode 100644 index 048d649..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -red = $red; - $this->green = $green; - $this->blue = $blue; - $this->alpha = $alpha; - } - - public function getRed(): int - { - return $this->red; - } - - public function getGreen(): int - { - return $this->green; - } - - public function getBlue(): int - { - return $this->blue; - } - - public function getAlpha(): int - { - return $this->alpha; - } - - public function getOpacity(): float - { - return 1 - $this->alpha / 127; - } - - public function toArray(): array - { - return [ - 'red' => $this->red, - 'green' => $this->green, - 'blue' => $this->blue, - 'alpha' => $this->alpha, - ]; - } -} diff --git a/conlite/external/endroid/qr-code/src/Color/ColorInterface.php b/conlite/external/endroid/qr-code/src/Color/ColorInterface.php deleted file mode 100644 index 91d3818..0000000 --- a/conlite/external/endroid/qr-code/src/Color/ColorInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - */ - public function toArray(): array; -} diff --git a/conlite/external/endroid/qr-code/src/Encoding/Encoding.php b/conlite/external/endroid/qr-code/src/Encoding/Encoding.php deleted file mode 100644 index 7586e6f..0000000 --- a/conlite/external/endroid/qr-code/src/Encoding/Encoding.php +++ /dev/null @@ -1,25 +0,0 @@ -value = $value; - } - - public function __toString(): string - { - return $this->value; - } -} diff --git a/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php b/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php deleted file mode 100644 index f57001b..0000000 --- a/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -width = $width; - $this->height = $height; - } - - public static function createForLabel(LabelInterface $label): self - { - if (false !== strpos($label->getText(), "\n")) { - throw new \Exception('Label does not support line breaks'); - } - - if (!function_exists('imagettfbbox')) { - throw new \Exception('Function "imagettfbbox" does not exist: check your FreeType installation'); - } - - $labelBox = imagettfbbox($label->getFont()->getSize(), 0, $label->getFont()->getPath(), $label->getText()); - - if (!is_array($labelBox)) { - throw new \Exception('Unable to generate label image box: check your FreeType installation'); - } - - return new self( - intval($labelBox[2] - $labelBox[0]), - intval($labelBox[0] - $labelBox[7]) - ); - } - - public function getWidth(): int - { - return $this->width; - } - - public function getHeight(): int - { - return $this->height; - } -} diff --git a/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php b/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php deleted file mode 100644 index 2639cf4..0000000 --- a/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php +++ /dev/null @@ -1,168 +0,0 @@ -data = $data; - $this->image = $image; - $this->mimeType = $mimeType; - $this->width = $width; - $this->height = $height; - $this->punchoutBackground = $punchoutBackground; - } - - public static function createForLogo(LogoInterface $logo): self - { - $data = @file_get_contents($logo->getPath()); - - if (!is_string($data)) { - throw new \Exception(sprintf('Invalid data at path "%s"', $logo->getPath())); - } - - if (false !== filter_var($logo->getPath(), FILTER_VALIDATE_URL)) { - $mimeType = self::detectMimeTypeFromUrl($logo->getPath()); - } else { - $mimeType = self::detectMimeTypeFromPath($logo->getPath()); - } - - $width = $logo->getResizeToWidth(); - $height = $logo->getResizeToHeight(); - - if ('image/svg+xml' === $mimeType) { - if (null === $width || null === $height) { - throw new \Exception('SVG Logos require an explicitly set resize width and height'); - } - - return new self($data, null, $mimeType, $width, $height, $logo->getPunchoutBackground()); - } - - $image = imagecreatefromstring($data); - - if (!$image) { - throw new \Exception(sprintf('Unable to parse image data at path "%s"', $logo->getPath())); - } - - // No target width and height specified: use from original image - if (null !== $width && null !== $height) { - return new self($data, $image, $mimeType, $width, $height, $logo->getPunchoutBackground()); - } - - // Only target width specified: calculate height - if (null !== $width && null === $height) { - return new self($data, $image, $mimeType, $width, intval(imagesy($image) * $width / imagesx($image)), $logo->getPunchoutBackground()); - } - - // Only target height specified: calculate width - if (null === $width && null !== $height) { - return new self($data, $image, $mimeType, intval(imagesx($image) * $height / imagesy($image)), $height, $logo->getPunchoutBackground()); - } - - return new self($data, $image, $mimeType, imagesx($image), imagesy($image), $logo->getPunchoutBackground()); - } - - public function getData(): string - { - return $this->data; - } - - /** @return mixed */ - public function getImage() - { - return $this->image; - } - - public function getMimeType(): string - { - return $this->mimeType; - } - - public function getWidth(): int - { - return $this->width; - } - - public function getHeight(): int - { - return $this->height; - } - - public function getPunchoutBackground(): bool - { - return $this->punchoutBackground; - } - - public function createDataUri(): string - { - return 'data:'.$this->mimeType.';base64,'.base64_encode($this->data); - } - - private static function detectMimeTypeFromUrl(string $url): string - { - /** @var mixed $format */ - $format = PHP_VERSION > 80000 ? true : 1; - - $headers = get_headers($url, $format); - - if (!is_array($headers) || !isset($headers['Content-Type'])) { - throw new \Exception(sprintf('Content type could not be determined for logo URL "%s"', $url)); - } - - return is_array($headers['Content-Type']) ? $headers['Content-Type'][1] : $headers['Content-Type']; - } - - private static function detectMimeTypeFromPath(string $path): string - { - if (!function_exists('mime_content_type')) { - throw new \Exception('You need the ext-fileinfo extension to determine logo mime type'); - } - - $mimeType = @mime_content_type($path); - - if (!is_string($mimeType)) { - throw new \Exception('Could not determine mime type'); - } - - if (!preg_match('#^image/#', $mimeType)) { - throw new \Exception('Logo path is not an image'); - } - - // Passing mime type image/svg results in invisible images - if ('image/svg' === $mimeType) { - return 'image/svg+xml'; - } - - return $mimeType; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php b/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php deleted file mode 100644 index c13e287..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php +++ /dev/null @@ -1,9 +0,0 @@ -validatePath($path); - - $this->path = $path; - $this->size = $size; - } - - private function validatePath(string $path): void - { - if (!file_exists($path)) { - throw new \Exception(sprintf('Invalid font path "%s"', $path)); - } - } - - public function getPath(): string - { - return $this->path; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php b/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php deleted file mode 100644 index 1c0de9a..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -size = $size; - } - - public function getPath(): string - { - return __DIR__.'/../../../assets/noto_sans.otf'; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php b/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php deleted file mode 100644 index 76c95b0..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php +++ /dev/null @@ -1,26 +0,0 @@ -size = $size; - } - - public function getPath(): string - { - return __DIR__.'/../../../assets/open_sans.ttf'; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Label.php b/conlite/external/endroid/qr-code/src/Label/Label.php deleted file mode 100644 index b15ef76..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Label.php +++ /dev/null @@ -1,111 +0,0 @@ -text = $text; - $this->font = isset($font) ? $font : new Font(__DIR__.'/../../assets/noto_sans.otf', 16); - $this->alignment = isset($alignment) ? $alignment : new LabelAlignmentCenter(); - $this->margin = isset($margin) ? $margin : new Margin(0, 10, 10, 10); - $this->textColor = isset($textColor) ? $textColor : new Color(0, 0, 0); - } - - public static function create(string $text): self - { - return new self($text); - } - - public function getText(): string - { - return $this->text; - } - - public function setText(string $text): self - { - $this->text = $text; - - return $this; - } - - public function getFont(): FontInterface - { - return $this->font; - } - - public function setFont(FontInterface $font): self - { - $this->font = $font; - - return $this; - } - - public function getAlignment(): LabelAlignmentInterface - { - return $this->alignment; - } - - public function setAlignment(LabelAlignmentInterface $alignment): self - { - $this->alignment = $alignment; - - return $this; - } - - public function getMargin(): MarginInterface - { - return $this->margin; - } - - public function setMargin(MarginInterface $margin): self - { - $this->margin = $margin; - - return $this; - } - - public function getTextColor(): ColorInterface - { - return $this->textColor; - } - - public function setTextColor(ColorInterface $textColor): self - { - $this->textColor = $textColor; - - return $this; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/LabelInterface.php b/conlite/external/endroid/qr-code/src/Label/LabelInterface.php deleted file mode 100644 index a7d2ed6..0000000 --- a/conlite/external/endroid/qr-code/src/Label/LabelInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -top = $top; - $this->right = $right; - $this->bottom = $bottom; - $this->left = $left; - } - - public function getTop(): int - { - return $this->top; - } - - public function getRight(): int - { - return $this->right; - } - - public function getBottom(): int - { - return $this->bottom; - } - - public function getLeft(): int - { - return $this->left; - } - - /** @return array */ - public function toArray(): array - { - return [ - 'top' => $this->top, - 'right' => $this->right, - 'bottom' => $this->bottom, - 'left' => $this->left, - ]; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php b/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php deleted file mode 100644 index bc428bd..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php +++ /dev/null @@ -1,19 +0,0 @@ - */ - public function toArray(): array; -} diff --git a/conlite/external/endroid/qr-code/src/Logo/Logo.php b/conlite/external/endroid/qr-code/src/Logo/Logo.php deleted file mode 100644 index f9bb38f..0000000 --- a/conlite/external/endroid/qr-code/src/Logo/Logo.php +++ /dev/null @@ -1,81 +0,0 @@ -path = $path; - $this->resizeToWidth = $resizeToWidth; - $this->resizeToHeight = $resizeToHeight; - $this->punchoutBackground = $punchoutBackground; - } - - public static function create(string $path): self - { - return new self($path); - } - - public function getPath(): string - { - return $this->path; - } - - public function setPath(string $path): self - { - $this->path = $path; - - return $this; - } - - public function getResizeToWidth(): ?int - { - return $this->resizeToWidth; - } - - public function setResizeToWidth(?int $resizeToWidth): self - { - $this->resizeToWidth = $resizeToWidth; - - return $this; - } - - public function getResizeToHeight(): ?int - { - return $this->resizeToHeight; - } - - public function setResizeToHeight(?int $resizeToHeight): self - { - $this->resizeToHeight = $resizeToHeight; - - return $this; - } - - public function getPunchoutBackground(): bool - { - return $this->punchoutBackground; - } - - public function setPunchoutBackground(bool $punchoutBackground): self - { - $this->punchoutBackground = $punchoutBackground; - - return $this; - } -} diff --git a/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php b/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php deleted file mode 100644 index 13d940c..0000000 --- a/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -> */ - private $blockValues = []; - - /** @var float */ - private $blockSize; - - /** @var int */ - private $innerSize; - - /** @var int */ - private $outerSize; - - /** @var int */ - private $marginLeft; - - /** @var int */ - private $marginRight; - - /** @param array> $blockValues */ - public function __construct(array $blockValues, int $size, int $margin, RoundBlockSizeModeInterface $roundBlockSizeMode) - { - $this->blockValues = $blockValues; - - $this->blockSize = $size / $this->getBlockCount(); - $this->innerSize = $size; - $this->outerSize = $size + 2 * $margin; - - if ($roundBlockSizeMode instanceof RoundBlockSizeModeEnlarge) { - $this->blockSize = intval(ceil($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - $this->outerSize = $this->innerSize + 2 * $margin; - } elseif ($roundBlockSizeMode instanceof RoundBlockSizeModeShrink) { - $this->blockSize = intval(floor($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - $this->outerSize = $this->innerSize + 2 * $margin; - } elseif ($roundBlockSizeMode instanceof RoundBlockSizeModeMargin) { - $this->blockSize = intval(floor($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - } - - if ($this->blockSize < 1) { - throw new \Exception('Too much data: increase image dimensions or lower error correction level'); - } - - $this->marginLeft = intval(($this->outerSize - $this->innerSize) / 2); - $this->marginRight = $this->outerSize - $this->innerSize - $this->marginLeft; - } - - public function getBlockValue(int $rowIndex, int $columnIndex): int - { - return $this->blockValues[$rowIndex][$columnIndex]; - } - - public function getBlockCount(): int - { - return count($this->blockValues[0]); - } - - public function getBlockSize(): float - { - return $this->blockSize; - } - - public function getInnerSize(): int - { - return $this->innerSize; - } - - public function getOuterSize(): int - { - return $this->outerSize; - } - - public function getMarginLeft(): int - { - return $this->marginLeft; - } - - public function getMarginRight(): int - { - return $this->marginRight; - } -} diff --git a/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php b/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php deleted file mode 100644 index be501f1..0000000 --- a/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ namespace Endroid\QrCode; -use Endroid\QrCode\Color\Color; -use Endroid\QrCode\Color\ColorInterface; -use Endroid\QrCode\Encoding\Encoding; -use Endroid\QrCode\Encoding\EncodingInterface; -use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelInterface; -use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow; -use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeInterface; -use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin; +use Endroid\QrCode\Exceptions\DataDoesntExistsException; +use Endroid\QrCode\Exceptions\FreeTypeLibraryMissingException; +use Endroid\QrCode\Exceptions\ImageFunctionFailedException; +use Endroid\QrCode\Exceptions\ImageTypeInvalidException; +use Endroid\QrCode\Exceptions\VersionTooLargeException; +use Endroid\QrCode\Exceptions\ImageSizeTooLargeException; +use Endroid\QrCode\Exceptions\ImageFunctionUnknownException; +use ReflectionFunction; -final class QrCode implements QrCodeInterface +/** + * Generate QR Code. + */ +class QrCode { + /** @const int Error Correction Level Low (7%) */ + const LEVEL_LOW = 1; + + /** @const int Error Correction Level Medium (15%) */ + const LEVEL_MEDIUM = 0; + + /** @const int Error Correction Level Quartile (25%) */ + const LEVEL_QUARTILE = 3; + + /** @const int Error Correction Level High (30%) */ + const LEVEL_HIGH = 2; + + /** @const string Image type png */ + const IMAGE_TYPE_PNG = 'png'; + + /** @const string Image type gif */ + const IMAGE_TYPE_GIF = 'gif'; + + /** @const string Image type jpeg */ + const IMAGE_TYPE_JPEG = 'jpeg'; + + /** @const string Image type wbmp */ + const IMAGE_TYPE_WBMP = 'wbmp'; + + /** @const int Horizontal label alignment to the center of image */ + const LABEL_HALIGN_CENTER = 0; + + /** @const int Horizontal label alignment to the left side of image */ + const LABEL_HALIGN_LEFT = 1; + + /** @const int Horizontal label alignment to the left border of QR Code */ + const LABEL_HALIGN_LEFT_BORDER = 2; + + /** @const int Horizontal label alignment to the left side of QR Code */ + const LABEL_HALIGN_LEFT_CODE = 3; + + /** @const int Horizontal label alignment to the right side of image */ + const LABEL_HALIGN_RIGHT = 4; + + /** @const int Horizontal label alignment to the right border of QR Code */ + const LABEL_HALIGN_RIGHT_BORDER = 5; + + /** @const int Horizontal label alignment to the right side of QR Code */ + const LABEL_HALIGN_RIGHT_CODE = 6; + + /** @const int Vertical label alignment to the top */ + const LABEL_VALIGN_TOP = 1; + + /** @const int Vertical label alignment to the top and hide border */ + const LABEL_VALIGN_TOP_NO_BORDER = 2; + + /** @const int Vertical label alignment to the middle*/ + const LABEL_VALIGN_MIDDLE = 3; + + /** @const int Vertical label alignment to the bottom */ + const LABEL_VALIGN_BOTTOM = 4; + /** @var string */ - private $data; + protected $logo = null; - /** @var EncodingInterface */ - private $encoding; + protected $logo_size = 48; - /** @var ErrorCorrectionLevelInterface */ - private $errorCorrectionLevel; + /** @var string */ + protected $text = ''; /** @var int */ - private $size; + protected $size = 0; /** @var int */ - private $margin; + protected $padding = 16; - /** @var RoundBlockSizeModeInterface */ - private $roundBlockSizeMode; + /** @var bool */ + protected $draw_quiet_zone = false; - /** @var ColorInterface */ - private $foregroundColor; + /** @var bool */ + protected $draw_border = false; - /** @var ColorInterface */ - private $backgroundColor; + /** @var array */ + protected $color_foreground = ['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]; - public function __construct( - string $data, - EncodingInterface $encoding = null, - ErrorCorrectionLevelInterface $errorCorrectionLevel = null, - int $size = 300, - int $margin = 10, - RoundBlockSizeModeInterface $roundBlockSizeMode = null, - ColorInterface $foregroundColor = null, - ColorInterface $backgroundColor = null - ) { - $this->data = $data; - $this->encoding = isset($encoding) ? $encoding : new Encoding('UTF-8'); - $this->errorCorrectionLevel = isset($errorCorrectionLevel) ? $errorCorrectionLevel : new ErrorCorrectionLevelLow(); + /** @var array */ + protected $color_background = ['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]; + + /** @var string */ + protected $label = ''; + + /** @var int */ + protected $label_font_size = 16; + + /** @var string */ + protected $label_font_path = ''; + + /** @var int */ + protected $label_halign = self::LABEL_HALIGN_CENTER; + + /** @var int */ + protected $label_valign = self::LABEL_VALIGN_MIDDLE; + + /** @var resource */ + protected $image = null; + + /** @var int */ + protected $version; + + /** @var int */ + protected $error_correction = self::LEVEL_MEDIUM; + + /** @var array */ + protected $error_corrections_available = [ + self::LEVEL_LOW, + self::LEVEL_MEDIUM, + self::LEVEL_QUARTILE, + self::LEVEL_HIGH, + ]; + + /** @var int */ + protected $module_size; + + /** @var string */ + protected $image_type = self::IMAGE_TYPE_PNG; + + /** @var array */ + protected $image_types_available = [ + self::IMAGE_TYPE_GIF, + self::IMAGE_TYPE_PNG, + self::IMAGE_TYPE_JPEG, + self::IMAGE_TYPE_WBMP, + ]; + + /** @var string */ + protected $image_path; + + /** @var string */ + protected $path; + + /** @var int */ + protected $structure_append_n; + + /** @var int */ + protected $structure_append_m; + + /** @var int */ + protected $structure_append_parity; + + /** @var string */ + protected $structure_append_original_data; + + /** + * Class constructor. + * + * @param string $text + */ + public function __construct($text = '') + { + $this->setPath(__DIR__.'/../assets/data'); + $this->setImagePath(__DIR__.'/../assets/image'); + $this->setLabelFontPath(__DIR__.'/../assets/font/opensans.ttf'); + $this->setText($text); + } + + /** + * Set structure append. + * + * @param int $n + * @param int $m + * @param int $parity Parity + * @param string $original_data Original data + * + * @return QrCode + */ + public function setStructureAppend($n, $m, $parity, $original_data) + { + $this->structure_append_n = $n; + $this->structure_append_m = $m; + $this->structure_append_parity = $parity; + $this->structure_append_original_data = $original_data; + + return $this; + } + + /** + * Set QR Code version. + * + * @param int $version QR Code version + * + * @return QrCode + */ + public function setVersion($version) + { + if ($version <= 40 && $version >= 0) { + $this->version = $version; + } + + return $this; + } + + /** + * Return QR Code version. + * + * @return int + */ + public function getVersion() + { + return $this->version; + } + + /** + * Set QR Code error correction level. + * + * @param mixed $error_correction Error Correction Level + * + * @return QrCode + */ + public function setErrorCorrection($error_correction) + { + if (!is_numeric($error_correction)) { + $level_constant = 'Endroid\QrCode\QrCode::LEVEL_'.strtoupper($error_correction); + $error_correction = constant($level_constant); + } + + if (in_array($error_correction, $this->error_corrections_available)) { + $this->error_correction = $error_correction; + } + + return $this; + } + + /** + * Return QR Code error correction level. + * + * @return int + */ + public function getErrorCorrection() + { + return $this->error_correction; + } + + /** + * Set QR Code module size. + * + * @param int $module_size Module size + * + * @return QrCode + */ + public function setModuleSize($module_size) + { + $this->module_size = $module_size; + + return $this; + } + + /** + * Return QR Code module size. + * + * @return int + */ + public function getModuleSize() + { + return $this->module_size; + } + + /** + * Set image type for rendering. + * + * @param string $image_type Image type + * + * @return QrCode + * + * @throws ImageTypeInvalidException + */ + public function setImageType($image_type) + { + if (!in_array($image_type, $this->image_types_available)) { + throw new ImageTypeInvalidException('QRCode: image type '.$image_type.' is invalid.'); + } + + $this->image_type = $image_type; + + return $this; + } + + /** + * Return image type for rendering. + * + * @return string + */ + public function getImageType() + { + return $this->image_type; + } + + /** + * Set image type for rendering via extension. + * + * @param string $extension Image extension + * + * @return QrCode + */ + public function setExtension($extension) + { + if ($extension == 'jpg') { + $this->setImageType('jpeg'); + } else { + $this->setImageType($extension); + } + + return $this; + } + + /** + * Set path to the images directory. + * + * @param string $image_path Image directory + * + * @return QrCode + */ + public function setImagePath($image_path) + { + $this->image_path = $image_path; + + return $this; + } + + /** + * Return path to the images directory. + * + * @return string + */ + public function getImagePath() + { + return $this->image_path; + } + + /** + * Set path to the data directory. + * + * @param string $path Data directory + * + * @return QrCode + */ + public function setPath($path) + { + $this->path = $path; + + return $this; + } + + /** + * Return path to the data directory. + * + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * Set logo in QR Code. + * + * @param string $logo Logo Path + * + * @throws Exceptions\DataDoesntExistsException + * + * @return QrCode + */ + public function setLogo($logo) + { + if (!file_exists($logo)) { + throw new DataDoesntExistsException("$logo file does not exist"); + } + + $this->logo = $logo; + + return $this; + } + + /** + * Set logo size in QR Code(default 48). + * + * @param int $logo_size Logo Size + * + * @return QrCode + */ + public function setLogoSize($logo_size) + { + $this->logo_size = $logo_size; + + return $this; + } + + /** + * Set text to hide in QR Code. + * + * @param string $text Text to hide + * + * @return QrCode + */ + public function setText($text) + { + $this->text = $text; + + return $this; + } + + /** + * Return text that will be hid in QR Code. + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Set QR Code size (width). + * + * @param int $size Width of the QR Code + * + * @return QrCode + */ + public function setSize($size) + { $this->size = $size; - $this->margin = $margin; - $this->roundBlockSizeMode = isset($roundBlockSizeMode) ? $roundBlockSizeMode : new RoundBlockSizeModeMargin(); - $this->foregroundColor = isset($foregroundColor) ? $foregroundColor : new Color(0, 0, 0); - $this->backgroundColor = isset($backgroundColor) ? $backgroundColor : new Color(255, 255, 255); - } - - public static function create(string $data): self - { - return new self($data); - } - - public function getData(): string - { - return $this->data; - } - - public function setData(string $data): self - { - $this->data = $data; return $this; } - public function getEncoding(): EncodingInterface - { - return $this->encoding; - } - - public function setEncoding(Encoding $encoding): self - { - $this->encoding = $encoding; - - return $this; - } - - public function getErrorCorrectionLevel(): ErrorCorrectionLevelInterface - { - return $this->errorCorrectionLevel; - } - - public function setErrorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): self - { - $this->errorCorrectionLevel = $errorCorrectionLevel; - - return $this; - } - - public function getSize(): int + /** + * Return QR Code size (width). + * + * @return int + */ + public function getSize() { return $this->size; } - public function setSize(int $size): self + /** + * Set padding around the QR Code. + * + * @param int $padding Padding around QR Code + * + * @return QrCode + */ + public function setPadding($padding) { - $this->size = $size; + $this->padding = $padding; return $this; } - public function getMargin(): int + /** + * Return padding around the QR Code. + * + * @return int + */ + public function getPadding() { - return $this->margin; + return $this->padding; } - public function setMargin(int $margin): self + /** + * Set draw required four-module wide margin. + * + * @param bool $draw_quiet_zone State of required four-module wide margin drawing + * + * @return QrCode + */ + public function setDrawQuietZone($draw_quiet_zone) { - $this->margin = $margin; + $this->draw_quiet_zone = $draw_quiet_zone; return $this; } - public function getRoundBlockSizeMode(): RoundBlockSizeModeInterface + /** + * Return draw required four-module wide margin. + * + * @return bool + */ + public function getDrawQuietZone() { - return $this->roundBlockSizeMode; + return $this->draw_quiet_zone; } - public function setRoundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): self + /** + * Set draw border around QR Code. + * + * @param bool $draw_border State of border drawing + * + * @return QrCode + */ + public function setDrawBorder($draw_border) { - $this->roundBlockSizeMode = $roundBlockSizeMode; + $this->draw_border = $draw_border; return $this; } - public function getForegroundColor(): ColorInterface + /** + * Return draw border around QR Code. + * + * @return bool + */ + public function getDrawBorder() { - return $this->foregroundColor; + return $this->draw_border; } - public function setForegroundColor(ColorInterface $foregroundColor): self + /** + * Set QR Code label (text). + * + * @param int|string $label Label to print under QR code + * + * @return QrCode + */ + public function setLabel($label) { - $this->foregroundColor = $foregroundColor; + $this->label = $label; return $this; } - public function getBackgroundColor(): ColorInterface + /** + * Return QR Code label (text). + * + * @return string + */ + public function getLabel() { - return $this->backgroundColor; + return $this->label; } - public function setBackgroundColor(ColorInterface $backgroundColor): self + /** + * Set QR Code label font size. + * + * @param int $label_font_size Font size of the QR code label + * + * @return QrCode + */ + public function setLabelFontSize($label_font_size) { - $this->backgroundColor = $backgroundColor; + $this->label_font_size = $label_font_size; return $this; } + + /** + * Return QR Code label font size. + * + * @return int + */ + public function getLabelFontSize() + { + return $this->label_font_size; + } + + /** + * Set QR Code label font path. + * + * @param int $label_font_path Path to the QR Code label's TTF font file + * + * @return QrCode + */ + public function setLabelFontPath($label_font_path) + { + $this->label_font_path = $label_font_path; + + return $this; + } + + /** + * Return path to the QR Code label's TTF font file. + * + * @return string + */ + public function getLabelFontPath() + { + return $this->label_font_path; + } + + /** + * Set label horizontal alignment. + * + * @param int $label_halign Label horizontal alignment + * + * @return QrCode + */ + public function setLabelHalign($label_halign) + { + $this->label_halign = $label_halign; + + return $this; + } + + /** + * Return label horizontal alignment. + * + * @return int + */ + public function getLabelHalign() + { + return $this->label_halign; + } + + /** + * Set label vertical alignment. + * + * @param int $label_valign Label vertical alignment + * + * @return QrCode + */ + public function setLabelValign($label_valign) + { + $this->label_valign = $label_valign; + + return $this; + } + + /** + * Return label vertical alignment. + * + * @return int + */ + public function getLabelValign() + { + return $this->label_valign; + } + + /** + * Set foreground color of the QR Code. + * + * @param array $color_foreground RGB color + * + * @return QrCode + */ + public function setForegroundColor($color_foreground) + { + if (!isset($color_foreground['a'])) { + $color_foreground['a'] = 0; + } + + $this->color_foreground = $color_foreground; + + return $this; + } + + /** + * Return foreground color of the QR Code. + * + * @return array + */ + public function getForegroundColor() + { + return $this->color_foreground; + } + + /** + * Set background color of the QR Code. + * + * @param array $color_background RGB color + * + * @return QrCode + */ + public function setBackgroundColor($color_background) + { + if (!isset($color_background['a'])) { + $color_background['a'] = 0; + } + + $this->color_background = $color_background; + + return $this; + } + + /** + * Return background color of the QR Code. + * + * @return array + */ + public function getBackgroundColor() + { + return $this->color_background; + } + + /** + * Return the image resource. + * + * @return resource + */ + public function getImage() + { + if (empty($this->image)) { + $this->create(); + } + + return $this->image; + } + + /** + * Return the data URI. + * + * @return string + */ + public function getDataUri() + { + if (empty($this->image)) { + $this->create(); + } + + ob_start(); + call_user_func('image'.$this->image_type, $this->image); + $contents = ob_get_clean(); + + return 'data:image/'.$this->image_type.';base64,'.base64_encode($contents); + } + + /** + * Render the QR Code then save it to given file name. + * + * @param string $filename File name of the QR Code + * + * @return QrCode + */ + public function save($filename) + { + $this->render($filename); + + return $this; + } + + /** + * Render the QR Code then save it to given file name or + * output it to the browser when file name omitted. + * + * @param null|string $filename File name of the QR Code + * @param null|string $format Format of the file (png, jpeg, jpg, gif, wbmp) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return QrCode + */ + public function render($filename = null, $format = 'png') + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + if ($filename === null) { + $success = call_user_func('image'.$format, $this->image); + } else { + $success = call_user_func_array('image'.$format, [$this->image, $filename]); + } + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + return $this; + } + + /** + * Returns the content type corresponding to the image type. + * + * @return string + */ + public function getContentType() + { + $contentType = 'image/'.$this->image_type; + + return $contentType; + } + + /** + * Create QR Code and return its content. + * + * @param string|null $format Image type (gif, png, wbmp, jpeg) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return string + */ + public function get($format = null) + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + ob_start(); + $success = call_user_func('image'.$format, $this->image); + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + $content = ob_get_clean(); + + return $content; + } + + /** + * Create the image. + * + * @throws Exceptions\DataDoesntExistsException + * @throws Exceptions\VersionTooLargeException + * @throws Exceptions\ImageSizeTooLargeException + * @throws \OverflowException + */ + public function create() + { + $image_path = $this->image_path; + $path = $this->path; + + $version_ul = 40; + + $qrcode_data_string = $this->text;//Previously from $_GET["d"]; + + $qrcode_error_correct = $this->error_correction;//Previously from $_GET["e"]; + $qrcode_module_size = $this->module_size;//Previously from $_GET["s"]; + $qrcode_version = $this->version;//Previously from $_GET["v"]; + $qrcode_image_type = $this->image_type;//Previously from $_GET["t"]; + + $qrcode_structureappend_n = $this->structure_append_n;//Previously from $_GET["n"]; + $qrcode_structureappend_m = $this->structure_append_m;//Previously from $_GET["m"]; + $qrcode_structureappend_parity = $this->structure_append_parity;//Previously from $_GET["p"]; + $qrcode_structureappend_originaldata = $this->structure_append_original_data;//Previously from $_GET["o"]; + + if ($qrcode_module_size > 0) { + } else { + if ($qrcode_image_type == 'jpeg') { + $qrcode_module_size = 8; + } else { + $qrcode_module_size = 4; + } + } + $data_length = strlen($qrcode_data_string); + if ($data_length <= 0) { + throw new DataDoesntExistsException('QRCode: data does not exist.'); + } + $data_counter = 0; + if ($qrcode_structureappend_n > 1 + && $qrcode_structureappend_n <= 16 + && $qrcode_structureappend_m > 0 + && $qrcode_structureappend_m <= 16) { + $data_value[0] = 3; + $data_bits[0] = 4; + + $data_value[1] = $qrcode_structureappend_m - 1; + $data_bits[1] = 4; + + $data_value[2] = $qrcode_structureappend_n - 1; + $data_bits[2] = 4; + + $originaldata_length = strlen($qrcode_structureappend_originaldata); + if ($originaldata_length > 1) { + $qrcode_structureappend_parity = 0; + $i = 0; + while ($i < $originaldata_length) { + $qrcode_structureappend_parity = ($qrcode_structureappend_parity ^ ord(substr($qrcode_structureappend_originaldata, $i, 1))); + ++$i; + } + } + + $data_value[3] = $qrcode_structureappend_parity; + $data_bits[3] = 8; + + $data_counter = 4; + } + + $data_bits[$data_counter] = 4; + + /* --- determine encode mode */ + + if (preg_match('/[^0-9]/', $qrcode_data_string) != 0) { + if (preg_match("/[^0-9A-Z \$\*\%\+\.\/\:\-]/", $qrcode_data_string) != 0) { + /* --- 8bit byte mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]; + + $data_value[$data_counter] = 4; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 8; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + ++$data_counter; + $i = 0; + while ($i < $data_length) { + $data_value[$data_counter] = ord(substr($qrcode_data_string, $i, 1)); + $data_bits[$data_counter] = 8; + ++$data_counter; + ++$i; + } + } else { + /* ---- alphanumeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 2; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 9; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $alphanumeric_character_hash = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, + '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, + 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23, + 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, + 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39, + '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44]; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 2) == 0) { + $data_value[$data_counter] = $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 6; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 45 + $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 11; + ++$data_counter; + } + ++$i; + } + } + } else { + /* ---- numeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 1; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 10; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 3) == 0) { + $data_value[$data_counter] = substr($qrcode_data_string, $i, 1); + $data_bits[$data_counter] = 4; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 10 + substr($qrcode_data_string, $i, 1); + if (($i % 3) == 1) { + $data_bits[$data_counter] = 7; + } else { + $data_bits[$data_counter] = 10; + ++$data_counter; + } + } + ++$i; + } + } + if (array_key_exists($data_counter, $data_bits) && $data_bits[$data_counter] > 0) { + ++$data_counter; + } + $i = 0; + $total_data_bits = 0; + while ($i < $data_counter) { + $total_data_bits += $data_bits[$i]; + ++$i; + } + + $ecc_character_hash = [ + 'L' => '1', + 'l' => '1', + 'M' => '0', + 'm' => '0', + 'Q' => '3', + 'q' => '3', + 'H' => '2', + 'h' => '2', + ]; + + if (!is_numeric($qrcode_error_correct)) { + $ec = @$ecc_character_hash[$qrcode_error_correct]; + } else { + $ec = $qrcode_error_correct; + } + + if (!$ec) { + $ec = 0; + } + + $max_data_bits = 0; + + $max_data_bits_array = [ + 0, 128, 224, 352, 512, 688, 864, 992, 1232, 1456, 1728, + 2032, 2320, 2672, 2920, 3320, 3624, 4056, 4504, 5016, 5352, + 5712, 6256, 6880, 7312, 8000, 8496, 9024, 9544, 10136, 10984, + 11640, 12328, 13048, 13800, 14496, 15312, 15936, 16816, 17728, 18672, + + 152, 272, 440, 640, 864, 1088, 1248, 1552, 1856, 2192, + 2592, 2960, 3424, 3688, 4184, 4712, 5176, 5768, 6360, 6888, + 7456, 8048, 8752, 9392, 10208, 10960, 11744, 12248, 13048, 13880, + 14744, 15640, 16568, 17528, 18448, 19472, 20528, 21616, 22496, 23648, + + 72, 128, 208, 288, 368, 480, 528, 688, 800, 976, + 1120, 1264, 1440, 1576, 1784, 2024, 2264, 2504, 2728, 3080, + 3248, 3536, 3712, 4112, 4304, 4768, 5024, 5288, 5608, 5960, + 6344, 6760, 7208, 7688, 7888, 8432, 8768, 9136, 9776, 10208, + + 104, 176, 272, 384, 496, 608, 704, 880, 1056, 1232, + 1440, 1648, 1952, 2088, 2360, 2600, 2936, 3176, 3560, 3880, + 4096, 4544, 4912, 5312, 5744, 6032, 6464, 6968, 7288, 7880, + 8264, 8920, 9368, 9848, 10288, 10832, 11408, 12016, 12656, 13328 + ]; + if (!is_numeric($qrcode_version)) { + $qrcode_version = 0; + } + if (!$qrcode_version) { + /* #--- auto version select */ + $i = 1 + 40 * $ec; + $j = $i + 39; + $qrcode_version = 1; + while ($i <= $j) { + if (($max_data_bits_array[$i]) >= $total_data_bits + $codeword_num_plus[$qrcode_version]) { + $max_data_bits = $max_data_bits_array[$i]; + break; + } + ++$i; + ++$qrcode_version; + } + } else { + $max_data_bits = $max_data_bits_array[$qrcode_version + 40 * $ec]; + } + if ($qrcode_version > $version_ul) { + throw new VersionTooLargeException('QRCode : version too large'); + } + + $total_data_bits += $codeword_num_plus[$qrcode_version]; + $data_bits[$codeword_num_counter_value] += $codeword_num_plus[$qrcode_version]; + + $max_codewords_array = [0, 26, 44, 70, 100, 134, 172, 196, 242, + 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, + 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, + 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706]; + + $max_codewords = $max_codewords_array[$qrcode_version]; + $max_modules_1side = 17 + ($qrcode_version << 2); + + $matrix_remain_bit = [0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0]; + + /* ---- read version ECC data file */ + + $byte_num = $matrix_remain_bit[$qrcode_version] + ($max_codewords << 3); + $filename = $path.'/qrv'.$qrcode_version.'_'.$ec.'.dat'; + $fp1 = fopen($filename, 'rb'); + $matx = fread($fp1, $byte_num); + $maty = fread($fp1, $byte_num); + $masks = fread($fp1, $byte_num); + $fi_x = fread($fp1, 15); + $fi_y = fread($fp1, 15); + $rs_ecc_codewords = ord(fread($fp1, 1)); + $rso = fread($fp1, 128); + fclose($fp1); + + $matrix_x_array = unpack('C*', $matx); + $matrix_y_array = unpack('C*', $maty); + $mask_array = unpack('C*', $masks); + + $rs_block_order = unpack('C*', $rso); + + $format_information_x2 = unpack('C*', $fi_x); + $format_information_y2 = unpack('C*', $fi_y); + + $format_information_x1 = [0, 1, 2, 3, 4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8]; + $format_information_y1 = [8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 4, 3, 2, 1, 0]; + + $max_data_codewords = ($max_data_bits >> 3); + + $filename = $path.'/rsc'.$rs_ecc_codewords.'.dat'; + $fp0 = fopen($filename, 'rb'); + $i = 0; + $rs_cal_table_array = []; + while ($i < 256) { + $rs_cal_table_array[$i] = fread($fp0, $rs_ecc_codewords); + ++$i; + } + fclose($fp0); + + /* --- set terminator */ + + if ($total_data_bits <= $max_data_bits - 4) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = 4; + } else { + if ($total_data_bits < $max_data_bits) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = $max_data_bits - $total_data_bits; + } else { + if ($total_data_bits > $max_data_bits) { + throw new \OverflowException('QRCode: overflow error'); + } + } + } + + /* ----divide data by 8bit */ + + $i = 0; + $codewords_counter = 0; + $codewords[0] = 0; + $remaining_bits = 8; + + while ($i <= $data_counter) { + $buffer = @$data_value[$i]; + $buffer_bits = @$data_bits[$i]; + + $flag = 1; + while ($flag) { + if ($remaining_bits > $buffer_bits) { + $codewords[$codewords_counter] = ((@$codewords[$codewords_counter] << $buffer_bits) | $buffer); + $remaining_bits -= $buffer_bits; + $flag = 0; + } else { + $buffer_bits -= $remaining_bits; + $codewords[$codewords_counter] = (($codewords[$codewords_counter] << $remaining_bits) | ($buffer >> $buffer_bits)); + + if ($buffer_bits == 0) { + $flag = 0; + } else { + $buffer = ($buffer & ((1 << $buffer_bits) - 1)); + $flag = 1; + } + + ++$codewords_counter; + if ($codewords_counter < $max_data_codewords - 1) { + $codewords[$codewords_counter] = 0; + } + $remaining_bits = 8; + } + } + ++$i; + } + if ($remaining_bits != 8) { + $codewords[$codewords_counter] = $codewords[$codewords_counter] << $remaining_bits; + } else { + --$codewords_counter; + } + + /* ---- set padding character */ + + if ($codewords_counter < $max_data_codewords - 1) { + $flag = 1; + while ($codewords_counter < $max_data_codewords - 1) { + ++$codewords_counter; + if ($flag == 1) { + $codewords[$codewords_counter] = 236; + } else { + $codewords[$codewords_counter] = 17; + } + $flag = $flag * (-1); + } + } + + /* ---- RS-ECC prepare */ + + $i = 0; + $j = 0; + $rs_block_number = 0; + $rs_temp[0] = ''; + + while ($i < $max_data_codewords) { + $rs_temp[$rs_block_number] .= chr($codewords[$i]); + ++$j; + + if ($j >= $rs_block_order[$rs_block_number + 1] - $rs_ecc_codewords) { + $j = 0; + ++$rs_block_number; + $rs_temp[$rs_block_number] = ''; + } + ++$i; + } + + /* + # + # RS-ECC main + # + */ + + $rs_block_number = 0; + $rs_block_order_num = count($rs_block_order); + + while ($rs_block_number < $rs_block_order_num) { + $rs_codewords = $rs_block_order[$rs_block_number + 1]; + $rs_data_codewords = $rs_codewords - $rs_ecc_codewords; + + $rstemp = $rs_temp[$rs_block_number].str_repeat(chr(0), $rs_ecc_codewords); + $padding_data = str_repeat(chr(0), $rs_data_codewords); + + $j = $rs_data_codewords; + while ($j > 0) { + $first = ord(substr($rstemp, 0, 1)); + + if ($first) { + $left_chr = substr($rstemp, 1); + $cal = $rs_cal_table_array[$first].$padding_data; + $rstemp = $left_chr ^ $cal; + } else { + $rstemp = substr($rstemp, 1); + } + + --$j; + } + + $codewords = array_merge($codewords, unpack('C*', $rstemp)); + + ++$rs_block_number; + } + + /* ---- flash matrix */ + $matrix_content = []; + $i = 0; + while ($i < $max_modules_1side) { + $j = 0; + while ($j < $max_modules_1side) { + $matrix_content[$j][$i] = 0; + ++$j; + } + ++$i; + } + + /* --- attach data */ + + $i = 0; + while ($i < $max_codewords) { + $codeword_i = $codewords[$i]; + $j = 8; + while ($j >= 1) { + $codeword_bits_number = ($i << 3) + $j; + $matrix_content[ $matrix_x_array[$codeword_bits_number] ][ $matrix_y_array[$codeword_bits_number] ] = ((255 * ($codeword_i & 1)) ^ $mask_array[$codeword_bits_number]); + $codeword_i = $codeword_i >> 1; + --$j; + } + ++$i; + } + + $matrix_remain = $matrix_remain_bit[$qrcode_version]; + while ($matrix_remain) { + $remain_bit_temp = $matrix_remain + ($max_codewords << 3); + $matrix_content[ $matrix_x_array[$remain_bit_temp] ][ $matrix_y_array[$remain_bit_temp] ] = (255 ^ $mask_array[$remain_bit_temp]); + --$matrix_remain; + } + + #--- mask select + + $min_demerit_score = 0; + $hor_master = ''; + $ver_master = ''; + $k = 0; + while ($k < $max_modules_1side) { + $l = 0; + while ($l < $max_modules_1side) { + $hor_master = $hor_master.chr($matrix_content[$l][$k]); + $ver_master = $ver_master.chr($matrix_content[$k][$l]); + ++$l; + } + ++$k; + } + $i = 0; + $all_matrix = $max_modules_1side * $max_modules_1side; + $mask_number = 0; + while ($i < 8) { + $demerit_n1 = 0; + $ptn_temp = []; + $bit = 1 << $i; + $bit_r = (~$bit) & 255; + $bit_mask = str_repeat(chr($bit), $all_matrix); + $hor = $hor_master & $bit_mask; + $ver = $ver_master & $bit_mask; + + $ver_shift1 = $ver.str_repeat(chr(170), $max_modules_1side); + $ver_shift2 = str_repeat(chr(170), $max_modules_1side).$ver; + $ver_shift1_0 = $ver.str_repeat(chr(0), $max_modules_1side); + $ver_shift2_0 = str_repeat(chr(0), $max_modules_1side).$ver; + $ver_or = chunk_split(~($ver_shift1 | $ver_shift2), $max_modules_1side, chr(170)); + $ver_and = chunk_split(~($ver_shift1_0 & $ver_shift2_0), $max_modules_1side, chr(170)); + + $hor = chunk_split(~$hor, $max_modules_1side, chr(170)); + $ver = chunk_split(~$ver, $max_modules_1side, chr(170)); + $hor = $hor.chr(170).$ver; + + $n1_search = '/'.str_repeat(chr(255), 5).'+|'.str_repeat(chr($bit_r), 5).'+/'; + $n3_search = chr($bit_r).chr(255).chr($bit_r).chr($bit_r).chr($bit_r).chr(255).chr($bit_r); + + $demerit_n3 = substr_count($hor, $n3_search) * 40; + $demerit_n4 = floor(abs(((100 * (substr_count($ver, chr($bit_r)) / ($byte_num))) - 50) / 5)) * 10; + + $n2_search1 = '/'.chr($bit_r).chr($bit_r).'+/'; + $n2_search2 = '/'.chr(255).chr(255).'+/'; + $demerit_n2 = 0; + preg_match_all($n2_search1, $ver_and, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $ptn_temp = []; + preg_match_all($n2_search2, $ver_or, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $demerit_n2 *= 3; + + $ptn_temp = []; + + preg_match_all($n1_search, $hor, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n1 += (strlen($str_temp) - 2); + } + + $demerit_score = $demerit_n1 + $demerit_n2 + $demerit_n3 + $demerit_n4; + + if ($demerit_score <= $min_demerit_score || $i == 0) { + $mask_number = $i; + $min_demerit_score = $demerit_score; + } + + ++$i; + } + + $mask_content = 1 << $mask_number; + + # --- format information + + $format_information_value = (($ec << 3) | $mask_number); + $format_information_array = ['101010000010010', '101000100100101', + '101111001111100', '101101101001011', '100010111111001', '100000011001110', + '100111110010111', '100101010100000', '111011111000100', '111001011110011', + '111110110101010', '111100010011101', '110011000101111', '110001100011000', + '110110001000001', '110100101110110', '001011010001001', '001001110111110', + '001110011100111', '001100111010000', '000011101100010', '000001001010101', + '000110100001100', '000100000111011', '011010101011111', '011000001101000', + '011111100110001', '011101000000110', '010010010110100', '010000110000011', + '010111011011010', '010101111101101']; + $i = 0; + while ($i < 15) { + $content = substr($format_information_array[$format_information_value], $i, 1); + + $matrix_content[$format_information_x1[$i]][$format_information_y1[$i]] = $content * 255; + $matrix_content[$format_information_x2[$i + 1]][$format_information_y2[$i + 1]] = $content * 255; + ++$i; + } + + $mib = $max_modules_1side; + if ($this->draw_quiet_zone) { + $mib += 8; + } + + if ($this->size == 0) { + $this->size = $mib * $qrcode_module_size; + if ($this->size > 1480) { + throw new ImageSizeTooLargeException('QRCode: image size too large'); + } + } + + $image_width = $this->size + $this->padding * 2; + $image_height = $this->size + $this->padding * 2; + + if (!empty($this->label)) { + if (!function_exists('imagettfbbox')) { + throw new FreeTypeLibraryMissingException('QRCode: missing function "imagettfbbox". Did you install the FreeType library?'); + } + $font_box = imagettfbbox($this->label_font_size, 0, $this->label_font_path, $this->label); + $label_width = (int) $font_box[2] - (int) $font_box[0]; + $label_height = (int) $font_box[0] - (int) $font_box[7]; + + if ($this->label_valign == self::LABEL_VALIGN_MIDDLE) { + $image_height += $label_height + $this->padding; + } else { + $image_height += $label_height; + } + } + + $output_image = imagecreate($image_width, $image_height); + imagecolorallocate($output_image, 255, 255, 255); + + $image_path = $image_path.'/qrv'.$qrcode_version.'.png'; + + $base_image = imagecreatefrompng($image_path); + $code_size = $this->size; + $module_size = function ($size = 1) use ($code_size, $base_image) { + return round($code_size / imagesx($base_image) * $size); + }; + + $col[1] = imagecolorallocate($base_image, 0, 0, 0); + $col[0] = imagecolorallocate($base_image, 255, 255, 255); + + $i = 4; + $mxe = 4 + $max_modules_1side; + $ii = 0; + while ($i < $mxe) { + $j = 4; + $jj = 0; + while ($j < $mxe) { + if ($matrix_content[$ii][$jj] & $mask_content) { + imagesetpixel($base_image, $i, $j, $col[1]); + } + ++$j; + ++$jj; + } + ++$i; + ++$ii; + } + + if ($this->draw_quiet_zone == true) { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 0, 0, $this->size, $this->size, $mib, $mib); + } else { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 4, 4, $this->size, $this->size, $mib, $mib); + } + + if ($this->draw_border == true) { + $border_width = $this->padding; + $border_height = $this->size + $this->padding - 1; + $border_color = imagecolorallocate($output_image, 0, 0, 0); + imagerectangle($output_image, $border_width, $border_width, $border_height, $border_height, $border_color); + } + + if (!empty($this->label)) { + // Label horizontal alignment + switch ($this->label_halign) { + case self::LABEL_HALIGN_LEFT: + $font_x = 0; + break; + + case self::LABEL_HALIGN_LEFT_BORDER: + $font_x = $this->padding; + break; + + case self::LABEL_HALIGN_LEFT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->padding + $module_size(4); + } else { + $font_x = $this->padding; + } + break; + + case self::LABEL_HALIGN_RIGHT: + $font_x = $this->size + ($this->padding * 2) - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_BORDER: + $font_x = $this->size + $this->padding - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->size + $this->padding - $label_width - $module_size(4); + } else { + $font_x = $this->size + $this->padding - $label_width; + } + break; + + default: + $font_x = floor($image_width - $label_width) / 2; + } + + // Label vertical alignment + switch ($this->label_valign) { + case self::LABEL_VALIGN_TOP_NO_BORDER: + $font_y = $image_height - $this->padding - 1; + break; + + case self::LABEL_VALIGN_BOTTOM: + $font_y = $image_height; + break; + + default: + $font_y = $image_height - $this->padding; + } + + $label_bg_x1 = $font_x - $module_size(2); + $label_bg_y1 = $font_y - $label_height; + $label_bg_x2 = $font_x + $label_width + $module_size(2); + $label_bg_y2 = $font_y; + + $color = imagecolorallocate($output_image, 0, 0, 0); + $label_bg_color = imagecolorallocate($output_image, 255, 255, 255); + + imagefilledrectangle($output_image, $label_bg_x1, $label_bg_y1, $label_bg_x2, $label_bg_y2, $label_bg_color); + imagettftext($output_image, $this->label_font_size, 0, $font_x, $font_y, $color, $this->label_font_path, $this->label); + } + + $imagecolorset_function = new ReflectionFunction('imagecolorset'); + $allow_alpha = $imagecolorset_function->getNumberOfParameters() == 6; + + if ($this->color_background != null) { + $index = imagecolorclosest($output_image, 255, 255, 255); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b'], $this->color_background['a']); + } else { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b']); + } + } + + if ($this->color_foreground != null) { + $index = imagecolorclosest($output_image, 0, 0, 0); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b'], $this->color_foreground['a']); + } else { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b']); + } + } + + if (!empty($this->logo)) { + $output_image_org = $output_image; + $output_image = imagecreatetruecolor($image_width, $image_height); + imagecopy($output_image, $output_image_org, 0, 0, 0, 0, $image_width, $image_height); + + $image_info = getimagesize($this->logo); + + if ($image_info !== false) { + $image_type = strtolower(substr(image_type_to_extension($image_info [2]), 1)); + $logo_image = call_user_func('imagecreatefrom'.$image_type, $this->logo); + } else { + $logo_image = call_user_func('imagecreatefrom'.$this->image_type, $this->logo); + } + + if (!$logo_image) { + throw new ImageFunctionFailedException('imagecreatefrom'.$this->image_type.' '.$this->logo.' failed'); + } + $src_w = imagesx($logo_image); + $src_h = imagesy($logo_image); + + $dst_x = ($image_width - $this->logo_size) / 2; + $dst_y = ($this->size + $this->padding * 2 - $this->logo_size) / 2; + + $successful = imagecopyresampled($output_image, $logo_image, $dst_x, $dst_y, 0, 0, $this->logo_size, $this->logo_size, $src_w, $src_h); + if (!$successful) { + throw new ImageFunctionFailedException('add logo [image'.$this->format.'] failed.'); + } + imagedestroy($logo_image); + } + $this->image = $output_image; + } } diff --git a/conlite/external/endroid/qr-code/src/QrCodeInterface.php b/conlite/external/endroid/qr-code/src/QrCodeInterface.php deleted file mode 100644 index 2c96984..0000000 --- a/conlite/external/endroid/qr-code/src/QrCodeInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -create($qrCode); - - return new BinaryResult($matrix); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php b/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php deleted file mode 100644 index 3e89515..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php +++ /dev/null @@ -1,28 +0,0 @@ -setValidateResult(true); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php b/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php deleted file mode 100644 index 2ffd219..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php +++ /dev/null @@ -1,44 +0,0 @@ -create($qrCode); - - $lines = [ - '%!PS-Adobe-3.0 EPSF-3.0', - '%%BoundingBox: 0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize(), - '/F { rectfill } def', - number_format($qrCode->getBackgroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', - '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize().' F', - number_format($qrCode->getForegroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', - ]; - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($matrix->getBlockCount() - 1 - $rowIndex, $columnIndex)) { - $x = $matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex; - $y = $matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex; - $lines[] = number_format($x, self::DECIMAL_PRECISION, '.', '').' '.number_format($y, self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' F'; - } - } - } - - return new EpsResult($lines); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php b/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php deleted file mode 100644 index fea70f4..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php +++ /dev/null @@ -1,116 +0,0 @@ -create($qrCode); - - $unit = 'mm'; - if (isset($options[self::WRITER_OPTION_UNIT])) { - $unit = $options[self::WRITER_OPTION_UNIT]; - } - - $allowedUnits = ['mm', 'pt', 'cm', 'in']; - if (!in_array($unit, $allowedUnits)) { - throw new \Exception(sprintf('PDF Measure unit should be one of [%s]', implode(', ', $allowedUnits))); - } - - $labelSpace = 0; - if ($label instanceof LabelInterface) { - $labelSpace = 30; - } - - if (!class_exists(\FPDF::class)) { - throw new \Exception('Unable to find FPDF: check your installation'); - } - - $foregroundColor = $qrCode->getForegroundColor(); - if ($foregroundColor->getAlpha() > 0) { - throw new \Exception('PDF Writer does not support alpha channels'); - } - $backgroundColor = $qrCode->getBackgroundColor(); - if ($backgroundColor->getAlpha() > 0) { - throw new \Exception('PDF Writer does not support alpha channels'); - } - - // @todo Check how to add label height later - $fpdf = new \FPDF('P', $unit, [$matrix->getOuterSize(), $matrix->getOuterSize() + $labelSpace]); - $fpdf->AddPage(); - - $fpdf->SetFillColor($backgroundColor->getRed(), $backgroundColor->getGreen(), $backgroundColor->getBlue()); - $fpdf->Rect(0, 0, $matrix->getOuterSize(), $matrix->getOuterSize(), 'F'); - $fpdf->SetFillColor($foregroundColor->getRed(), $foregroundColor->getGreen(), $foregroundColor->getBlue()); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - $fpdf->Rect( - $matrix->getMarginLeft() + ($columnIndex * $matrix->getBlockSize()), - $matrix->getMarginLeft() + ($rowIndex * $matrix->getBlockSize()), - $matrix->getBlockSize(), - $matrix->getBlockSize(), - 'F' - ); - } - } - } - - $result = new PdfResult($fpdf); - - if ($logo instanceof LogoInterface) { - $result = $this->addLogo($logo, $result); - } - - if ($label instanceof LabelInterface) { - $fpdf->setY($fpdf->GetPageHeight() - 25); - $fpdf->SetFont('Helvetica', null, $label->getFont()->getSize()); - $fpdf->Cell(0, 0, $label->getText(), 0, 0, 'C'); - } - - return $result; - } - - private function addLogo(LogoInterface $logo, PdfResult $result): PdfResult - { - $fpdf = $result->getPdf(); - - $logoPath = $logo->getPath(); - $logoHeight = $logo->getResizeToHeight(); - $logoWidth = $logo->getResizeToWidth(); - - if (null === $logoHeight || null === $logoWidth) { - [$logoSourceWidth, $logoSourceHeight] = \getimagesize($logoPath); - - if (null === $logoWidth) { - $logoWidth = (int) $logoSourceWidth; - } - - if (null === $logoHeight) { - $aspectRatio = $logoWidth / $logoSourceWidth; - $logoHeight = (int) ($logoSourceHeight * $aspectRatio); - } - } - - $logoX = $fpdf->GetPageWidth() / 2 - (int) $logoWidth / 2; - $logoY = $fpdf->GetPageHeight() / 2 - (int) $logoHeight / 2; - - $fpdf->Image($logoPath, $logoX, $logoY, $logoWidth, $logoHeight); - - return $result; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/PngWriter.php b/conlite/external/endroid/qr-code/src/Writer/PngWriter.php deleted file mode 100644 index 209d69e..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/PngWriter.php +++ /dev/null @@ -1,232 +0,0 @@ -create($qrCode); - - $baseBlockSize = 50; - $baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize); - - if (!$baseImage) { - throw new \Exception('Unable to generate image: check your GD installation'); - } - - /** @var int $foregroundColor */ - $foregroundColor = imagecolorallocatealpha( - $baseImage, - $qrCode->getForegroundColor()->getRed(), - $qrCode->getForegroundColor()->getGreen(), - $qrCode->getForegroundColor()->getBlue(), - $qrCode->getForegroundColor()->getAlpha() - ); - - /** @var int $backgroundColor */ - $backgroundColor = imagecolorallocatealpha( - $baseImage, - $qrCode->getBackgroundColor()->getRed(), - $qrCode->getBackgroundColor()->getGreen(), - $qrCode->getBackgroundColor()->getBlue(), - $qrCode->getBackgroundColor()->getAlpha() - ); - - imagefill($baseImage, 0, 0, $backgroundColor); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - imagefilledrectangle( - $baseImage, - $columnIndex * $baseBlockSize, - $rowIndex * $baseBlockSize, - ($columnIndex + 1) * $baseBlockSize, - ($rowIndex + 1) * $baseBlockSize, - $foregroundColor - ); - } - } - } - - $targetWidth = $matrix->getOuterSize(); - $targetHeight = $matrix->getOuterSize(); - - if ($label instanceof LabelInterface) { - $labelImageData = LabelImageData::createForLabel($label); - $targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom(); - } - - $targetImage = imagecreatetruecolor($targetWidth, $targetHeight); - - if (!$targetImage) { - throw new \Exception('Unable to generate image: check your GD installation'); - } - - /** @var int $backgroundColor */ - $backgroundColor = imagecolorallocatealpha( - $targetImage, - $qrCode->getBackgroundColor()->getRed(), - $qrCode->getBackgroundColor()->getGreen(), - $qrCode->getBackgroundColor()->getBlue(), - $qrCode->getBackgroundColor()->getAlpha() - ); - - imagefill($targetImage, 0, 0, $backgroundColor); - - imagecopyresampled( - $targetImage, - $baseImage, - $matrix->getMarginLeft(), - $matrix->getMarginLeft(), - 0, - 0, - $matrix->getInnerSize(), - $matrix->getInnerSize(), - imagesx($baseImage), - imagesy($baseImage) - ); - - if (PHP_VERSION_ID < 80000) { - imagedestroy($baseImage); - } - - if ($qrCode->getBackgroundColor()->getAlpha() > 0) { - imagesavealpha($targetImage, true); - } - - $result = new PngResult($targetImage); - - if ($logo instanceof LogoInterface) { - $result = $this->addLogo($logo, $result); - } - - if ($label instanceof LabelInterface) { - $result = $this->addLabel($label, $result); - } - - return $result; - } - - private function addLogo(LogoInterface $logo, PngResult $result): PngResult - { - $logoImageData = LogoImageData::createForLogo($logo); - - if ('image/svg+xml' === $logoImageData->getMimeType()) { - throw new \Exception('PNG Writer does not support SVG logo'); - } - - $targetImage = $result->getImage(); - - if ($logoImageData->getPunchoutBackground()) { - /** @var int $transparent */ - $transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127); - imagealphablending($targetImage, false); - for ( - $x_offset = intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2); - $x_offset < intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2) + $logoImageData->getWidth(); - ++$x_offset - ) { - for ( - $y_offset = intval(imagesy($targetImage) / 2 - $logoImageData->getHeight() / 2); - $y_offset < intval(imagesy($targetImage) / 2 - $logoImageData->getHeight() / 2) + $logoImageData->getHeight(); - ++$y_offset - ) { - imagesetpixel( - $targetImage, - $x_offset, - $y_offset, - $transparent - ); - } - } - } - - imagecopyresampled( - $targetImage, - $logoImageData->getImage(), - intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2), - intval(imagesx($targetImage) / 2 - $logoImageData->getHeight() / 2), - 0, - 0, - $logoImageData->getWidth(), - $logoImageData->getHeight(), - imagesx($logoImageData->getImage()), - imagesy($logoImageData->getImage()) - ); - - if (PHP_VERSION_ID < 80000) { - imagedestroy($logoImageData->getImage()); - } - - return new PngResult($targetImage); - } - - private function addLabel(LabelInterface $label, PngResult $result): PngResult - { - $targetImage = $result->getImage(); - - $labelImageData = LabelImageData::createForLabel($label); - - /** @var int $textColor */ - $textColor = imagecolorallocatealpha( - $targetImage, - $label->getTextColor()->getRed(), - $label->getTextColor()->getGreen(), - $label->getTextColor()->getBlue(), - $label->getTextColor()->getAlpha() - ); - - $x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2); - $y = imagesy($targetImage) - $label->getMargin()->getBottom(); - - if ($label->getAlignment() instanceof LabelAlignmentLeft) { - $x = $label->getMargin()->getLeft(); - } elseif ($label->getAlignment() instanceof LabelAlignmentRight) { - $x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight(); - } - - imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText()); - - return new PngResult($targetImage); - } - - public function validateResult(ResultInterface $result, string $expectedData): void - { - $string = $result->getString(); - - if (!class_exists(QrReader::class)) { - throw new \Exception('Please install khanamiryan/qrcode-detector-decoder or disable image validation'); - } - - if (PHP_VERSION_ID >= 80000) { - throw new \Exception('The validator is not compatible with PHP 8 yet, see https://github.com/khanamiryan/php-qrcode-detector-decoder/pull/103'); - } - - $reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB); - if ($reader->text() !== $expectedData) { - throw new \Exception('Built-in validation reader read "'.$reader->text().'" instead of "'.$expectedData.'". - Adjust your parameters to increase readability or disable built-in validation.'); - } - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php deleted file mode 100644 index 43b680b..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php +++ /dev/null @@ -1,19 +0,0 @@ -getMimeType().';base64,'.base64_encode($this->getString()); - } - - public function saveToFile(string $path): void - { - $string = $this->getString(); - file_put_contents($path, $string); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php deleted file mode 100644 index 7466759..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php +++ /dev/null @@ -1,35 +0,0 @@ -matrix = $matrix; - } - - public function getString(): string - { - $binaryString = ''; - for ($rowIndex = 0; $rowIndex < $this->matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $this->matrix->getBlockCount(); ++$columnIndex) { - $binaryString .= $this->matrix->getBlockValue($rowIndex, $columnIndex); - } - $binaryString .= "\n"; - } - - return $binaryString; - } - - public function getMimeType(): string - { - return 'text/plain'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php deleted file mode 100644 index ce9a28c..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php +++ /dev/null @@ -1,83 +0,0 @@ - */ - private $options; - - /** @var bool */ - private $validateResult = false; - - /** @param array $options */ - public function __construct(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []) - { - $this->qrCode = $qrCode; - $this->logo = $logo; - $this->label = $label; - $this->options = $options; - } - - public function setValidateResult(bool $validateResult): void - { - $this->validateResult = $validateResult; - } - - public function getString(): string - { - $debugLines = []; - - $debugLines[] = 'Data: '.$this->qrCode->getData(); - $debugLines[] = 'Encoding: '.$this->qrCode->getEncoding(); - $debugLines[] = 'Error Correction Level: '.get_class($this->qrCode->getErrorCorrectionLevel()); - $debugLines[] = 'Size: '.$this->qrCode->getSize(); - $debugLines[] = 'Margin: '.$this->qrCode->getMargin(); - $debugLines[] = 'Round block size mode: '.get_class($this->qrCode->getRoundBlockSizeMode()); - $debugLines[] = 'Foreground color: ['.implode(', ', $this->qrCode->getForegroundColor()->toArray()).']'; - $debugLines[] = 'Background color: ['.implode(', ', $this->qrCode->getBackgroundColor()->toArray()).']'; - - foreach ($this->options as $key => $value) { - $debugLines[] = 'Writer option: '.$key.': '.$value; - } - - if (isset($this->logo)) { - $debugLines[] = 'Logo path: '.$this->logo->getPath(); - $debugLines[] = 'Logo resize to width: '.$this->logo->getResizeToWidth(); - $debugLines[] = 'Logo resize to height: '.$this->logo->getResizeToHeight(); - } - - if (isset($this->label)) { - $debugLines[] = 'Label text: '.$this->label->getText(); - $debugLines[] = 'Label font path: '.$this->label->getFont()->getPath(); - $debugLines[] = 'Label font size: '.$this->label->getFont()->getSize(); - $debugLines[] = 'Label alignment: '.get_class($this->label->getAlignment()); - $debugLines[] = 'Label margin: ['.implode(', ', $this->label->getMargin()->toArray()).']'; - $debugLines[] = 'Label text color: ['.implode(', ', $this->label->getTextColor()->toArray()).']'; - } - - $debugLines[] = 'Validate result: '.($this->validateResult ? 'true' : 'false'); - - return implode("\n", $debugLines); - } - - public function getMimeType(): string - { - return 'text/plain'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php deleted file mode 100644 index 31d56a1..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php +++ /dev/null @@ -1,27 +0,0 @@ - */ - private $lines; - - /** @param array $lines */ - public function __construct(array $lines) - { - $this->lines = $lines; - } - - public function getString(): string - { - return implode("\n", $this->lines); - } - - public function getMimeType(): string - { - return 'image/eps'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php deleted file mode 100644 index 936219e..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php +++ /dev/null @@ -1,31 +0,0 @@ -fpdf = $fpdf; - } - - public function getPdf(): \FPDF - { - return $this->fpdf; - } - - public function getString(): string - { - return $this->fpdf->Output('S'); - } - - public function getMimeType(): string - { - return 'application/pdf'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php deleted file mode 100644 index efa26c5..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php +++ /dev/null @@ -1,36 +0,0 @@ -image = $image; - } - - /** @return mixed */ - public function getImage() - { - return $this->image; - } - - public function getString(): string - { - ob_start(); - imagepng($this->image); - - return strval(ob_get_clean()); - } - - public function getMimeType(): string - { - return 'image/png'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php b/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php deleted file mode 100644 index a255605..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -xml = $xml; - $this->excludeXmlDeclaration = $excludeXmlDeclaration; - } - - public function getXml(): \SimpleXMLElement - { - return $this->xml; - } - - public function getString(): string - { - $string = $this->xml->asXML(); - - if (!is_string($string)) { - throw new \Exception('Could not save SVG XML to string'); - } - - if ($this->excludeXmlDeclaration) { - $string = str_replace("\n", '', $string); - } - - return $string; - } - - public function getMimeType(): string - { - return 'image/svg+xml'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php b/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php deleted file mode 100644 index 88665af..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php +++ /dev/null @@ -1,109 +0,0 @@ -create($qrCode); - - $xml = new \SimpleXMLElement(''); - $xml->addAttribute('version', '1.1'); - $xml->addAttribute('width', $matrix->getOuterSize().'px'); - $xml->addAttribute('height', $matrix->getOuterSize().'px'); - $xml->addAttribute('viewBox', '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize()); - $xml->addChild('defs'); - - $blockDefinition = $xml->defs->addChild('rect'); - $blockDefinition->addAttribute('id', $options[self::WRITER_OPTION_BLOCK_ID]); - $blockDefinition->addAttribute('width', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '')); - $blockDefinition->addAttribute('height', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '')); - $blockDefinition->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getForegroundColor()->getRed(), $qrCode->getForegroundColor()->getGreen(), $qrCode->getForegroundColor()->getBlue())); - $blockDefinition->addAttribute('fill-opacity', strval($qrCode->getForegroundColor()->getOpacity())); - - $background = $xml->addChild('rect'); - $background->addAttribute('x', '0'); - $background->addAttribute('y', '0'); - $background->addAttribute('width', strval($matrix->getOuterSize())); - $background->addAttribute('height', strval($matrix->getOuterSize())); - $background->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getBackgroundColor()->getRed(), $qrCode->getBackgroundColor()->getGreen(), $qrCode->getBackgroundColor()->getBlue())); - $background->addAttribute('fill-opacity', strval($qrCode->getBackgroundColor()->getOpacity())); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - $block = $xml->addChild('use'); - $block->addAttribute('x', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex, self::DECIMAL_PRECISION, '.', '')); - $block->addAttribute('y', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex, self::DECIMAL_PRECISION, '.', '')); - $block->addAttribute('xlink:href', '#'.$options[self::WRITER_OPTION_BLOCK_ID], 'http://www.w3.org/1999/xlink'); - } - } - } - - $result = new SvgResult($xml, $options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION]); - - if ($logo instanceof LogoInterface) { - $this->addLogo($logo, $result, $options); - } - - return $result; - } - - /** @param array $options */ - private function addLogo(LogoInterface $logo, SvgResult $result, array $options): void - { - $logoImageData = LogoImageData::createForLogo($logo); - - if (!isset($options[self::WRITER_OPTION_FORCE_XLINK_HREF])) { - $options[self::WRITER_OPTION_FORCE_XLINK_HREF] = false; - } - - $xml = $result->getXml(); - - /** @var \SimpleXMLElement $xmlAttributes */ - $xmlAttributes = $xml->attributes(); - - $x = intval($xmlAttributes->width) / 2 - $logoImageData->getWidth() / 2; - $y = intval($xmlAttributes->height) / 2 - $logoImageData->getHeight() / 2; - - $imageDefinition = $xml->addChild('image'); - $imageDefinition->addAttribute('x', strval($x)); - $imageDefinition->addAttribute('y', strval($y)); - $imageDefinition->addAttribute('width', strval($logoImageData->getWidth())); - $imageDefinition->addAttribute('height', strval($logoImageData->getHeight())); - $imageDefinition->addAttribute('preserveAspectRatio', 'none'); - - // xlink:href is actually deprecated, but still required when placing the qr code in a pdf. - // SimpleXML strips out the xlink part by using addAttribute(), so it must be set directly. - if ($options[self::WRITER_OPTION_FORCE_XLINK_HREF]) { - $imageDefinition['xlink:href'] = $logoImageData->createDataUri(); - } else { - $imageDefinition->addAttribute('href', $logoImageData->createDataUri()); - } - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php b/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php deleted file mode 100644 index 4f40048..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - $options */ - public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface; -} diff --git a/conlite/external/frontend/config.php b/conlite/external/frontend/config.php deleted file mode 100644 index 4714600..0000000 --- a/conlite/external/frontend/config.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * Requirements: - * @con_php_req 5 - * @con_template - * @con_notice - * - * - * @package ContenidoBackendArea - * @version - * @author - * @copyright four for business AG - * @license http://www.contenido.org/license/LIZENZ.txt - * @link http://www.4fb.de - * @link http://www.contenido.org - * - * - * - * {@internal - * created - * modified 2008-07-04, bilal arslan, added security fix - * - * $Id$: - * }} - * - */ - if(!defined('CON_FRAMEWORK')) { - die('Illegal call'); -} - -// Relative path to contenido directory, for all inclusions, in most cases: "../contenido/" -$contenido_path = "!PATH!"; - -// If language isn't specified, set this client and language (ID) -$load_lang = "!LANG!"; -$load_client = "!CLIENT!"; - -/* Various debugging options */ -$frontend_debug["container_display"] = false; -$frontend_debug["module_display"] = false; -$frontend_debug["module_timing"] = false; -$frontend_debug["module_timing_summary"] = false; - -/* Set to 1 to brute-force module regeneration */ -$force = 0; - -?> diff --git a/conlite/external/frontend/dbfs.php b/conlite/external/frontend/dbfs.php index 20566d8..6c8d42a 100644 --- a/conlite/external/frontend/dbfs.php +++ b/conlite/external/frontend/dbfs.php @@ -8,9 +8,11 @@ * * Requirements: * @con_php_req 5 + * @con_template + * @con_notice + * * * @package ContenidoBackendArea - * @version * @author unknown * @copyright four for business AG * @license http://www.contenido.org/license/LIZENZ.txt @@ -20,15 +22,17 @@ * * * {@internal - * created unknown - * modified 2008-06-16, H. Librenz - Hotfix: checking for potential unsecure calling - * modified 2008-07-04, bilal arslan, added security fix + * created unknown + * modified 2008-06-16, H. Librenz - Hotfix: checking for potential unsecure calling + * modified 2008-07-03, bilal arslan, added security fix + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] * * $Id$: * }} * */ - if (!defined("CON_FRAMEWORK")) { + +if (!defined("CON_FRAMEWORK")) { define("CON_FRAMEWORK", true); } @@ -36,12 +40,8 @@ $contenido_path = ''; # include the config file of the frontend to init the Client and Language Id include_once ("config.php"); -// include security class and check request variables -include_once ($contenido_path . 'classes/class.security.php'); -Contenido_Security::checkRequests(); - -include_once ($contenido_path . "includes/startup.php"); -cInclude("includes", "functions.general.php"); +// Contenido startup process +include_once ($contenido_path . 'includes/startup.php'); if ($contenido) { diff --git a/conlite/external/frontend/front_content.php b/conlite/external/frontend/front_content.php index 27fbc7f..5056912 100644 --- a/conlite/external/frontend/front_content.php +++ b/conlite/external/frontend/front_content.php @@ -1,4 +1,5 @@ Fatal Error
Couldn't include ConLite startup."); +} +include_once($contenido_path . 'includes/startup.php'); cInclude("includes", "functions.con.php"); cInclude("includes", "functions.con2.php"); cInclude("includes", "functions.api.php"); cInclude("includes", "functions.pathresolver.php"); -if ($cfg["use_pseudocron"] == true) -{ +if ($cfg["use_pseudocron"] == true) { /* Include cronjob-Emulator */ $oldpwd = getcwd(); - chdir($cfg["path"]["contenido"].$cfg["path"]["cronjobs"]); + chdir($cfg["path"]["contenido"] . $cfg["path"]["cronjobs"]); cInclude("includes", "pseudo-cron.inc.php"); chdir($oldpwd); } @@ -100,53 +93,40 @@ if ($cfg["use_pseudocron"] == true) * PHPLIB application development toolkit * @see http://sourceforge.net/projects/phplib */ -if ($contenido) -{ +if (!empty($contenido)) { //Backend - page_open(array ('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); - i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); -} -else -{ + page_open(array('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); + i18nInit($cfg["path"]["contenido"] . $cfg["path"]["locale"], $belang); +} else { //Frontend - page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); + page_open(array('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); } -/** - * Bugfix - * @see http://contenido.org/forum/viewtopic.php?t=18291 - * - * added by H. Librenz (2007-12-07) - */ -//includePluginConf(); -/** - * fixed bugfix - using functions brokes variable scopes! - * - * added by H. Librenz (2007-12-21) based on an idea of A. Lindner - */ require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; -$db = new DB_ConLite; +// Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 +CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); + +$db = new DB_ConLite(); $sess->register("cfgClient"); $sess->register("errsite_idcat"); $sess->register("errsite_idart"); $sess->register("encoding"); -if ($cfgClient["set"] != "set") -{ +if (empty($cfgClient["set"]) || $cfgClient["set"] != "set") { rereadClients(); } # Check if this request is for a compressed file -if ($_GET['action'] == 'get_compressed') { +if (isset($_GET['action']) && $_GET['action'] == 'get_compressed') { # Get the calling parameters - $sFilename = ((isset($_GET['f'])) ? $_GET['f'] : $_GET['amp;f']); - $sContentType = ((isset($_GET['c'])) ? $_GET['c'] : $_GET['amp;c']); - + $sFilename = ((isset($_GET['f'])) ? $_GET['f'] : $_GET['amp;f']); + $sContentType = ((isset($_GET['c'])) ? $_GET['c'] : $_GET['amp;c']); + # Output the file using the class output() function Output_Compressor::output($cfgClient[$client]['path']['frontend'] . 'cache/', $sFilename, $sContentType); - + # Don't do anything else exit(); } @@ -154,8 +134,7 @@ if ($_GET['action'] == 'get_compressed') { // Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); -if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) -{ +if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) { // get encodings of all languages $encoding = array(); $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"]; @@ -170,27 +149,25 @@ if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) // @TODO: Should be outsourced into startup process but requires a better detection (frontend or backend) Contenido_Security::checkFrontendGlobals(); - // update urlbuilder set http base path Contenido_Url::getInstance()->getUrlBuilder()->setHttpBasePath($cfgClient[$client]['htmlpath']['frontend']); - // Initialize language if (!isset($lang)) { // if there is an entry load_lang in frontend/config.php use it, else use the first language of this client - if(isset($load_lang)){ + if (isset($load_lang)) { // load_client is set in frontend/config.php $lang = $load_lang; - }else{ + } else { $sql = "SELECT B.idlang FROM - ".$cfg["tab"]["clients_lang"]." AS A, - ".$cfg["tab"]["lang"]." AS B + " . $cfg["tab"]["clients_lang"] . " AS A, + " . $cfg["tab"]["lang"] . " AS B WHERE - A.idclient='".Contenido_Security::toInteger($client)."' AND + A.idclient='" . Contenido_Security::toInteger($client) . "' AND A.idlang = B.idlang LIMIT 0,1"; @@ -202,11 +179,12 @@ if (!isset($lang)) { } } -if (!$sess->is_registered("lang") ) $sess->register("lang"); -if (!$sess->is_registered("client") ) $sess->register("client"); +if (!$sess->is_registered("lang")) + $sess->register("lang"); +if (!$sess->is_registered("client")) + $sess->register("client"); -if (isset ($username)) -{ +if (isset($username)) { $auth->login_if(true); } @@ -219,8 +197,7 @@ header("Content-Type: text/html; charset={$encoding[$lang]}"); * if http global logout is set e.g. front_content.php?logout=true * log out the current user. */ -if (isset ($logout)) -{ +if (isset($logout)) { $auth->logout(true); $auth->unauth(true); $auth->auth["uname"] = "nobody"; @@ -229,8 +206,7 @@ if (isset ($logout)) /* * local configuration */ -if (file_exists("config.local.php")) -{ +if (file_exists("config.local.php")) { @ include ("config.local.php"); } @@ -238,101 +214,86 @@ if (file_exists("config.local.php")) * If the path variable was passed, try to resolve it to a Category Id * e.g. front_content.php?path=/company/products/ */ -if (isset($path) && strlen($path) > 1) -{ +if (isset($path) && strlen($path) > 1) { /* Which resolve method is configured? */ - if ($cfg["urlpathresolve"] == true) - { + if ($cfg["urlpathresolve"] == true) { $iLangCheck = 0; $idcat = prResolvePathViaURLNames($path, $iLangCheck); - - } - else - { + } else { $iLangCheck = 0; $idcat = prResolvePathViaCategoryNames($path, $iLangCheck); - if(($lang != $iLangCheck) && ((int)$iLangCheck != 0)){ + if (($lang != $iLangCheck) && ((int) $iLangCheck != 0)) { $lang = $iLangCheck; } - } } // error page -$aParams = array ( - 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], - 'lang' => $lang, 'error'=> '1' +$aParams = array( + 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], + 'lang' => $lang, 'error' => '1' ); $errsite = 'Location: ' . Contenido_Url::getInstance()->buildRedirect($aParams); - /* * Try to initialize variables $idcat, $idart, $idcatart, $idartlang * Note: These variables can be set via http globals e.g. front_content.php?idcat=41&idart=34&idcatart=35&idartlang=42 * If not the values will be computed. */ -if ($idart && !$idcat && !$idcatart) -{ +if ($idart && !$idcat && !$idcatart) { /* Try to fetch the first idcat */ - $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $sql = "SELECT idcat FROM " . $cfg["tab"]["cat_art"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "'"; $db->query($sql); - if ($db->next_record()) - { + if ($db->next_record()) { $idcat = $db->f("idcat"); } } -unset ($code); -unset ($markscript); +unset($code); +unset($markscript); -if (!$idcatart) -{ - if (!$idart) - { - if (!$idcat) - { +if (empty($idcatart)) { + if (empty($idart)) { + if (empty($idcat)) { # Note: In earlier Contenido versions the information if an article is startarticle of a category has been stored # in relation con_cat_art. - if ($cfg["is_start_compatible"] == true) - { + if ($cfg["is_start_compatible"] == true) { $sql = "SELECT idart, B.idcat FROM - ".$cfg["tab"]["cat_art"]." AS A, - ".$cfg["tab"]["cat_tree"]." AS B, - ".$cfg["tab"]["cat"]." AS C + " . $cfg["tab"]["cat_art"] . " AS A, + " . $cfg["tab"]["cat_tree"] . " AS B, + " . $cfg["tab"]["cat"] . " AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND is_start='1' AND - idclient='".Contenido_Security::toInteger($client)."' + idclient='" . Contenido_Security::toInteger($client) . "' ORDER BY idtree ASC"; - } - else - { + } else { # Note: Now the information if an article is startarticle of a category is stored in relation con_cat_lang. $sql = "SELECT A.idart, B.idcat FROM - ".$cfg["tab"]["cat_art"]." AS A, - ".$cfg["tab"]["cat_tree"]." AS B, - ".$cfg["tab"]["cat"]." AS C, - ".$cfg["tab"]["cat_lang"]." AS D, - ".$cfg["tab"]["art_lang"]." AS E + " . $cfg["tab"]["cat_art"] . " AS A, + " . $cfg["tab"]["cat_tree"] . " AS B, + " . $cfg["tab"]["cat"] . " AS C, + " . $cfg["tab"]["cat_lang"] . " AS D, + " . $cfg["tab"]["art_lang"] . " AS E WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND D.startidartlang = E.idartlang AND - D.idlang='".Contenido_Security::toInteger($lang)."' AND + D.idlang='" . Contenido_Security::toInteger($lang) . "' AND E.idart=A.idart AND - E.idlang='".Contenido_Security::toInteger($lang)."' AND - idclient='".Contenido_Security::toInteger($client)."' + E.idlang='" . Contenido_Security::toInteger($lang) . "' AND + idclient='" . Contenido_Security::toInteger($client) . "' ORDER BY idtree ASC"; } @@ -343,40 +304,34 @@ if (!$idcatart) $idart = $db->f("idart"); $idcat = $db->f("idcat"); } else { - if($contenido) { + if (!empty($contenido)) { cInclude("includes", "functions.i18n.php"); die(i18n("No start article for this category")); } else { - if($error == 1) { + if ($error == 1) { die("Fatal error: Could not display error page. Error to display was: 'No start article in this category'"); } else { header($errsite); - exit; + exit; } } } } else { $idart = -1; - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND is_start='1'"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND is_start='1'"; $db->query($sql); - if ($db->next_record()) - { + if ($db->next_record()) { $idart = $db->f("idart"); } - } - else - { - $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT startidartlang FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); - if ($db->next_record()) - { - if ($db->f("startidartlang") != 0) - { - $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($db->f("startidartlang"))."'"; + if ($db->next_record()) { + if ($db->f("startidartlang") != 0) { + $sql = "SELECT idart FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang='" . Contenido_Security::toInteger($db->f("startidartlang")) . "'"; $db->query($sql); $db->next_record(); $idart = $db->f("idart"); @@ -384,36 +339,26 @@ if (!$idcatart) } } - if ($idart != -1) - { - } - else - { + if ($idart != -1) { + + } else { // error message in backend - if ($contenido) - { + if ($contenido) { cInclude("includes", "functions.i18n.php"); die(i18n("No start article for this category")); - } - else - { - if ($error == 1) - { + } else { + if ($error == 1) { echo "Fatal error: Could not display error page. Error to display was: 'No start article in this category'"; - } - else - { + } else { header($errsite); - exit; + exit; } } } } } -} -else -{ - $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; +} else { + $sql = "SELECT idcat, idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); $db->next_record(); @@ -423,9 +368,8 @@ else } /* Get idcatart */ -if (0 != $idart && 0 != $idcat) -{ - $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($idcat)."'"; +if (0 != $idart && 0 != $idcat) { + $sql = "SELECT idcatart FROM " . $cfg["tab"]["cat_art"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "' AND idcat = '" . Contenido_Security::toInteger($idcat) . "'"; $db->query($sql); $db->next_record(); @@ -435,10 +379,9 @@ if (0 != $idart && 0 != $idcat) $idartlang = getArtLang($idart, $lang); -if ($idartlang === false) -{ +if ($idartlang === false) { header($errsite); - exit; + exit; } /* @@ -454,8 +397,6 @@ if ($cfg["cache"]["disable"] != '1') { $oCacheHandler->start($iStartTime); // $iStartTime ist optional und ist die startzeit des scriptes, z. b. am anfang von fron_content.php } // END: concache - - ############################################## # BACKEND / FRONTEND EDITING ############################################## @@ -470,44 +411,39 @@ if ($cfg["cache"]["disable"] != '1') { * The reason is to avoid cross-site scripting errors in the backend, if the backend domain differs from * the frontend domain. */ -if ($contenido) -{ +if ($contenido) { $perm->load_permissions(); /* Change mode edit / view */ - if (isset ($changeview)) - { + if (isset($changeview)) { $sess->register("view"); $view = $changeview; } $col = new InUseCollection; - if ($overrideid != "" && $overridetype != "") - { + if ($overrideid != "" && $overridetype != "") { $col->removeItemMarks($overridetype, $overrideid); } /* Remove all own marks */ $col->removeSessionMarks($sess->id); /* If the override flag is set, override a specific InUseItem */ - list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang"); + list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml'] . "external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang"); $sHtmlInUse = ''; $sHtmlInUseMessage = ''; - if ($inUse == true) - { + if ($inUse == true) { $disabled = 'disabled="disabled"'; - $sHtmlInUseCss = ''; + $sHtmlInUseCss = ''; $sHtmlInUseMessage = $message; } - $sql = "SELECT locked FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT locked FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); $locked = $db->f("locked"); - if ($locked == 1) - { + if ($locked == 1) { $inUse = true; $disabled = 'disabled="disabled"'; } @@ -515,47 +451,40 @@ if ($contenido) // CEC to check if the user has permission to edit articles in this category CEC_Hook::setBreakCondition(false, true); // break at "false", default value "true" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid'] + 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid'] ); - if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true) - { + if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true) { /* Create buttons for editing */ $edit_preview = ''; - if ($view == "edit") - { + if ($view == "edit") { $edit_preview = ''; - } - else - { + } else { $edit_preview = ''; } /* Display articles */ - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT idart, is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT idart, is_start FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' ORDER BY idart"; $db->query($sql); - } - else - { - $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + } else { + $sql = "SELECT idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' ORDER BY idart"; $db->query($sql); } @@ -564,53 +493,41 @@ if ($contenido) $edit_preview .= '
- Preview + Preview - Preview + Preview
- Preview + Preview - Edit + Edit
Articles in category:
'; - while ($db->next_record() && ($db->affected_rows() != 1)) - { + while ($db->next_record() && ($db->affected_rows() != 1)) { $class = "font-family:'Verdana'; font-size:10; color:#000000; text-decoration: underline; font-weight:normal"; - if (!isset ($idart)) - { - if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang)) - { + if (!isset($idart)) { + if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang)) { $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline ;font-weight:bold"; } - } - else - { - if ($idart == $db->f("idart")) - { + } else { + if ($idart == $db->f("idart")) { $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline; font-weight:bold"; } } - $edit_preview .= "url("front_content.php?idart=".$db->f("idart")."&idcat=$idcat")."\">$a "; - $a ++; + $edit_preview .= "url("front_content.php?idart=" . $db->f("idart") . "&idcat=$idcat") . "\">$a "; + $a++; } $edit_preview .= '
'; - } - } // end if $contenido /* If mode is 'edit' and user has permission to edit articles in the current category */ -if ($inUse == false && $allow == true && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat))) -{ +if (empty($inUse) && (isset($allow) && $allow == true) && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat))) { cInclude("includes", "functions.tpl.php"); cInclude("includes", "functions.con.php"); - include ($cfg["path"]["contenido"].$cfg["path"]["includes"]."include.con_editcontent.php"); -} -else -{ + include ($cfg["path"]["contenido"] . $cfg["path"]["includes"] . "include.con_editcontent.php"); +} else { ############################################## # FRONTEND VIEW ############################################## /* Mark submenuitem 'Preview' in the Contenido Backend (Area: Contenido --> Articles --> Preview) */ - if ($contenido) - { + if ($contenido) { $markscript = markSubMenuItem(4, true); } @@ -620,10 +537,10 @@ else $sql = "SELECT createcode FROM - ".$cfg["tab"]["cat_art"]." + " . $cfg["tab"]["cat_art"] . " WHERE - idcat = '".Contenido_Security::toInteger($idcat)."' AND - idart = '".Contenido_Security::toInteger($idart)."'"; + idcat = '" . Contenido_Security::toInteger($idcat) . "' AND + idart = '" . Contenido_Security::toInteger($idart) . "'"; $db->query($sql); $db->next_record(); @@ -633,47 +550,36 @@ else ############################################## /* Check if code is expired, create new code if needed */ - if ($db->f("createcode") == 0 && $force == 0 && $cfg['dceModEdit']['use'] !== true) - { - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + if ($db->f("createcode") == 0 && $force == 0 && $cfg['dceModEdit']['use'] !== true && $cfg['dceLayEdit']['use'] !== true) { + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); - if ($db->num_rows() == 0) - { + if ($db->num_rows() == 0) { /* Include here for performance reasons */ cInclude("includes", "functions.tpl.php"); conGenerateCode($idcat, $idart, $lang, $client); - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); } - if ($db->next_record()) - { + if ($db->next_record()) { $code = stripslashes($db->f("code")); - } - else - { + } else { if ($contenido) $code = "echo \"No code available.\";"; - else - { - if ($error == 1) - { + else { + if ($error == 1) { echo "Fatal error: Could not display error page. Error to display was: 'No code available'"; - } - else - { + } else { header($errsite); - exit; + exit; } } } - } - else - { - $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + } else { + $sql = "DELETE FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); cInclude("includes", "functions.con.php"); @@ -682,7 +588,7 @@ else conGenerateCode($idcat, $idart, $lang, $client); - $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT code FROM " . $cfg["tab"]["code"] . " WHERE idcatart = '" . Contenido_Security::toInteger($idcatart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); @@ -691,16 +597,18 @@ else } /* Add mark Script to code if user is in the backend */ - $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1); + if(!empty($markscript)) { + $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1); + } /* If article is in use, display notification */ - if ($sHtmlInUseCss && $sHtmlInUseMessage) { + if (!empty($sHtmlInUseCss) && !empty($sHtmlInUseMessage)) { $code = preg_replace("/<\/head>/i", "$sHtmlInUseCss\n", $code, 1); $code = preg_replace("/(]*)>/i", "\${1}> \n $sHtmlInUseMessage", $code, 1); } /* Check if category is public */ - $sql = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT public FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); @@ -710,80 +618,68 @@ else ############################################## # protected categories ############################################## - if ($public == 0) - { - if ($auth->auth["uid"] == "nobody") - { - $sql = "SELECT user_id, value FROM ".$cfg["tab"]["user_prop"]." WHERE type='frontend' and name='allowed_ip'"; + if ($public == 0) { + if ($auth->auth["uid"] == "nobody") { + $sql = "SELECT user_id, value FROM " . $cfg["tab"]["user_prop"] . " WHERE type='frontend' and name='allowed_ip'"; $db->query($sql); - while ($db->next_record()) - { + while ($db->next_record()) { $user_id = $db->f("user_id"); $range = urldecode($db->f("value")); $slash = strpos($range, "/"); - if ($slash == false) - { + if ($slash == false) { $netmask = "255.255.255.255"; $network = $range; - } - else - { + } else { $network = substr($range, 0, $slash); - $netmask = substr($range, $slash +1, strlen($range) - $slash -1); + $netmask = substr($range, $slash + 1, strlen($range) - $slash - 1); } - if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"])) - { + if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"])) { $sql = "SELECT idright - FROM ".$cfg["tab"]["rights"]." AS A, - ".$cfg["tab"]["actions"]." AS B, - ".$cfg["tab"]["area"]." AS C - WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '".Contenido_Security::escapeDB($user_id, $db2)."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."' + FROM " . $cfg["tab"]["rights"] . " AS A, + " . $cfg["tab"]["actions"] . " AS B, + " . $cfg["tab"]["area"] . " AS C + WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '" . Contenido_Security::escapeDB($user_id, $db2) . "' AND A.idcat = '" . Contenido_Security::toInteger($idcat) . "' AND A.idarea = C.idarea AND B.idaction = A.idaction"; - $db2 = new DB_ConLite; + $db2 = new DB_ConLite(); $db2->query($sql); - if ($db2->num_rows() > 0) - { + if ($db2->num_rows() > 0) { $auth->auth["uid"] = $user_id; $validated = 1; } } } - if ($validated != 1) - { + if ($validated != 1) { // CEC to check category access CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] ); $auth->login_if(!$allow); } - } - else - { + } else { // CEC to check category access CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" $allow = CEC_Hook::executeWhileBreakCondition( - 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] ); /* - added 2008-11-18 Timo Trautmann - in backendeditmode also check if logged in backenduser has permission to view preview of page - */ + added 2008-11-18 Timo Trautmann + in backendeditmode also check if logged in backenduser has permission to view preview of page + */ if ($allow == false && $contenido && $perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat)) { $allow = true; } - if (!$allow) - { + if (!$allow) { header($errsite); - exit; + exit; } } } @@ -791,47 +687,24 @@ else ############################################## # statistic ############################################## - /* Sanity: If the statistic table doesn't contain an entry, create one */ - $sql = "SELECT idcatart FROM ".$cfg["tab"]["stat"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; - $db->query($sql); - - if ($db->next_record()) - { - /* Update the statistics. */ - $sql = "UPDATE ".$cfg["tab"]["stat"]." SET visited = visited + 1 WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idclient = '".Contenido_Security::toInteger($client)."' - AND idlang = '".Contenido_Security::toInteger($lang)."'"; - $db->query($sql); - } - else - { - /* Insert new record */ - $next = $db->nextid($cfg["tab"]["stat"]); - $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (visited, idcatart, idlang, idstat, idclient) VALUES ('1', '".Contenido_Security::toInteger($idcatart)."', '".Contenido_Security::toInteger($lang)."', - '".Contenido_Security::toInteger($next)."', '".Contenido_Security::toInteger($client)."')"; - $db->query($sql); - } + $oStatCol = new cApiStatCollection(); + $oStatCol->trackView($idcatart); /* * Check if an article is start article of the category */ - if ($cfg["is_start_compatible"] == true) - { - $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + if ($cfg["is_start_compatible"] == true) { + $sql = "SELECT is_start FROM " . $cfg["tab"]["cat_art"] . " WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "'"; $db->query($sql); $db->next_record(); $isstart = $db->f("is_start"); - } - else - { - $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT startidartlang FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); - if ($db->f("idartlang") == $idartlang) - { + if ($db->f("idartlang") == $idartlang) { $isstart = 1; - } - else - { + } else { $isstart = 0; } } @@ -839,18 +712,15 @@ else ############################################## # time management ############################################## - $sql = "SELECT timemgmt FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $sql = "SELECT timemgmt FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; $db->query($sql); $db->next_record(); - if (($db->f("timemgmt") == "1") && ($isstart != 1)) - { - $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."' + if (($db->f("timemgmt") == "1") && ($isstart != 1)) { + $sql = "SELECT online, redirect, redirect_url FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "' AND NOW() > datestart AND NOW() < dateend"; - } - else - { - $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + } else { + $sql = "SELECT online, redirect, redirect_url FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; } $db->query($sql); @@ -860,15 +730,14 @@ else $redirect = $db->f("redirect"); $redirect_url = $db->f("redirect_url"); - @ eval ("\$"."redirect_url = \"$redirect_url\";"); // transform variables + @ eval("\$" . "redirect_url = \"$redirect_url\";"); // transform variables $insert_base = getEffectiveSetting('generator', 'basehref', "true"); /* * generate base url */ - if ($insert_base == "true") - { + if ($insert_base == "true") { $is_XHTML = getEffectiveSetting('generator', 'xhtml', "false"); $str_base_uri = $cfgClient[$client]["path"]["htmlpath"]; @@ -877,21 +746,19 @@ else $str_base_uri = CEC_Hook::executeAndReturn('Contenido.Frontend.BaseHrefGeneration', $str_base_uri); if ($is_XHTML == "true") { - $baseCode = ''; + $baseCode = ''; } else { - $baseCode = ''; + $baseCode = ''; } - $code = str_ireplace_once("", "\n".$baseCode, $code); + $code = str_ireplace_once("", "\n" . $baseCode, $code); } /* * Handle online (offline) articles */ - if ($online) - { - if ($redirect == '1' && $redirect_url != '') - { + if ($online) { + if ($redirect == '1' && $redirect_url != '') { page_close(); /* * Redirect to the URL defined in article properties @@ -907,12 +774,9 @@ else } header("Location: $redirect_url"); exit; - } - else - { - if ($cfg["debug"]["codeoutput"]) - { - echo ""; + } else { + if ($cfg["debug"]["codeoutput"]) { + echo ""; } /* @@ -923,11 +787,11 @@ else $aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', '')); if (in_array(Contenido_Security::toInteger($idart), $aExclude)) { - eval ("?>\n".$code."\n\n" . $code . "\n\n".$code."\n\n" . $code . "\n\n".$code."\n\n" . $code . "\ndisconnect(); -page_close(); -?> \ No newline at end of file +page_close(); \ No newline at end of file diff --git a/conlite/external/frontend/front_crcloginform.inc.php b/conlite/external/frontend/front_crcloginform.inc.php index 929dff0..663897c 100644 --- a/conlite/external/frontend/front_crcloginform.inc.php +++ b/conlite/external/frontend/front_crcloginform.inc.php @@ -1,40 +1,25 @@ - * - * Requirements: - * @con_php_req 5 - * @con_template - * @con_notice - * - * - * @package ContenidoBackendArea - * @version + * @package ConLite + * @subpackage Frontend + * @version $Rev$ + * @author Ortwin Pinke + * @copyright conrepo.org + * @link http://conlite.conrepo.org * @author Jan Lengowski * @copyright four for business AG * @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @link http://www.contenido.org - * - * - * - * {@internal - * created 2003-01-21 - * modified 2005-09-29, Andreas Lindner - * modified 2008-07-04, bilal arslan, added security fix - * modified 2008-11-18, Murat Purc, add usage of Contenido_Url to create urls to frontend pages and redesign of HTML markup - * modified 2009-01-03, Murat Purc, synchronized with cms/front_crcloginform.inc.php - * modified 2011-02-07, Dominik Ziegler, fixed check of but_ok.gif and changed input type button to submit * * $Id$: - * }} - * */ +/** + * security check + */ if(!defined('CON_FRAMEWORK')) { die('Illegal call'); } @@ -108,18 +93,17 @@ if ( file_exists($cfgClient[$client]['path']['frontend'] . 'images/but_ok.gif') } ?> - + - + :: :: :: :: Contenido Login - - + @@ -156,13 +140,14 @@ if ( file_exists($cfgClient[$client]['path']['frontend'] . 'images/but_ok.gif') - - + - + \ No newline at end of file diff --git a/conlite/external/frontend/includes/class.input.helper.php b/conlite/external/frontend/includes/class.input.helper.php index c19fcf2..bd0bc52 100644 --- a/conlite/external/frontend/includes/class.input.helper.php +++ b/conlite/external/frontend/includes/class.input.helper.php @@ -1,4 +1,5 @@ 0) - { - $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, "; - $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, "; - $sSQL .= "tblCatLang.startidartlang as idstartartlang "; - $sSQL .= "FROM ".$cfg["tab"]["art_lang"]." AS tblArtLang, ".$cfg["tab"]["cat_art"]." AS tblCatArt, "; - $sSQL .= $cfg["tab"]["cat_lang"]." AS tblCatLang "; - $sSQL .= "WHERE tblCatArt.idcat = '".Contenido_Security::toInteger($iIDCat)."' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND "; + if (is_numeric($iIDCat) && $iIDCat > 0) { + $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, "; + $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, "; + $sSQL .= "tblCatLang.startidartlang as idstartartlang "; + $sSQL .= "FROM " . $cfg["tab"]["art_lang"] . " AS tblArtLang, " . $cfg["tab"]["cat_art"] . " AS tblCatArt, "; + $sSQL .= $cfg["tab"]["cat_lang"] . " AS tblCatLang "; + $sSQL .= "WHERE tblCatArt.idcat = '" . Contenido_Security::toInteger($iIDCat) . "' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND "; - if ($bArtOnline) { - $sSQL .= "tblArtLang.online = '1' AND "; - } + if ($bArtOnline) { + $sSQL .= "tblArtLang.online = '1' AND "; + } - $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' "; - if ($cfg["is_start_compatible"] == true) { - $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article - } else { - $sSQL .= "ORDER BY tblArtLang.title"; - } + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' "; + if ($cfg["is_start_compatible"] == true) { + $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article + } else { + $sSQL .= "ORDER BY tblArtLang.title"; + } - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return 0; - } else { - $iCounter = count($this->_options); - while ($oDB->next_record()) - { - // Generate new option element - $oOption = new cHTMLOptionElement($sSpaces."   ".substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart")); + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return 0; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) { + // Generate new option element + $oOption = new cHTMLOptionElement($sSpaces . "   " . substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart")); - if ($bColored) - { - $bIsStartArticle = false; - if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) { - // Compatible mode and "start article" flag is set - $bIsStartArticle = true; - } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) { - // No compatible mode and current article is start article (idstartartlang is the same for all records within a category) - $bIsStartArticle = true; - } + if ($bColored) { + $bIsStartArticle = false; + if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) { + // Compatible mode and "start article" flag is set + $bIsStartArticle = true; + } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) { + // No compatible mode and current article is start article (idstartartlang is the same for all records within a category) + $bIsStartArticle = true; + } - if ($bIsStartArticle) - { - if ($oDB->f("online") == 0) { - // Start article, but offline -> red - $oOption->setStyle("color: #ff0000;"); - } else { - // Start article -> blue - $oOption->setStyle("color: #0000ff;"); - } - } else if ($oDB->f("online") == 0) { - // Offline article -> grey - $oOption->setStyle("color: #666666;"); - } - } + if ($bIsStartArticle) { + if ($oDB->f("online") == 0) { + // Start article, but offline -> red + $oOption->setStyle("color: #ff0000;"); + } else { + // Start article -> blue + $oOption->setStyle("color: #0000ff;"); + } + } else if ($oDB->f("online") == 0) { + // Offline article -> grey + $oOption->setStyle("color: #666666;"); + } + } - // Add option element to the list - $this->addOptionElement($iCounter, $oOption); - $iCounter++; - } - return $iCount; - } - } else { - return 0; - } - } + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); + $iCounter++; + } + return $iCount; + } + } else { + return 0; + } + } - /** - * Function addCategories. Adds category elements (optionally including articles) to select box values. - * Note: Using "with articles" adds the articles also - but the categories will get a negative value! - * There is no way to distinguish between a category id and an article id... - * - * @param int $iMaxLevel Max. level shown (to be exact: except this level) - * @param bool $bColored Add color information to option elements - * @param bool $bCatVisible If true, only add idcat as value, if cat is visible - * @param bool $bCatPublic If true, only add idcat as value, if cat is public - * @param bool $bWithArt Add also articles per category - * @param bool $bArtOnline If true, show only online articles - * - * @return int Number of items added - **/ - function addCategories ($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true, - $bWithArt = false, $bArtOnline = true) - { - global $cfg, $client, $lang; + /** + * Function addCategories. Adds category elements (optionally including articles) to select box values. + * Note: Using "with articles" adds the articles also - but the categories will get a negative value! + * There is no way to distinguish between a category id and an article id... + * + * @param int $iMaxLevel Max. level shown (to be exact: except this level) + * @param bool $bColored Add color information to option elements + * @param bool $bCatVisible If true, only add idcat as value, if cat is visible + * @param bool $bCatPublic If true, only add idcat as value, if cat is public + * @param bool $bWithArt Add also articles per category + * @param bool $bArtOnline If true, show only online articles + * + * @return int Number of items added + * */ + function addCategories($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true, + $bWithArt = false, $bArtOnline = true) { + global $cfg, $client, $lang; - $oDB = new DB_ConLite; + $oDB = new DB_Contenido; - $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, "; - $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level "; - $sSQL .= "FROM ".$cfg["tab"]["cat"]." AS tblCat, ".$cfg["tab"]["cat_lang"]." AS tblCatLang, "; - $sSQL .= $cfg["tab"]["cat_tree"]." AS tblCatTree "; - $sSQL .= "WHERE tblCat.idclient = '".Contenido_Security::escapeDB($client, $oDB)."' AND tblCatLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' AND "; - $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; + $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, "; + $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level "; + $sSQL .= "FROM " . $cfg["tab"]["cat"] . " AS tblCat, " . $cfg["tab"]["cat_lang"] . " AS tblCatLang, "; + $sSQL .= $cfg["tab"]["cat_tree"] . " AS tblCatTree "; + $sSQL .= "WHERE tblCat.idclient = '" . Contenido_Security::escapeDB($client, $oDB) . "' AND tblCatLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' AND "; + $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; - if ($iMaxLevel > 0) { - $sSQL .= "AND tblCatTree.level < '".Contenido_Security::escapeDB($iMaxLevel, $oDB)."' "; - } - $sSQL .= "ORDER BY tblCatTree.idtree"; + if ($iMaxLevel > 0) { + $sSQL .= "AND tblCatTree.level < '" . Contenido_Security::escapeDB($iMaxLevel, $oDB) . "' "; + } + $sSQL .= "ORDER BY tblCatTree.idtree"; - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return false; - } else { - $iCounter = count($this->_options); - while ($oDB->next_record()) - { - $sSpaces = ""; - $sStyle = ""; - $iID = $oDB->f("idcat"); + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) { + $sSpaces = ""; + $sStyle = ""; + $iID = $oDB->f("idcat"); - for ($i = 0; $i < $oDB->f("level"); $i++) { - $sSpaces .= "   "; - } + for ($i = 0; $i < $oDB->f("level"); $i++) { + $sSpaces .= "   "; + } - // Generate new option element - if (($bCatVisible && $oDB->f("visible") == 0) || - ($bCatPublic && $oDB->f("public") == 0)) { - // If category has to be visible or public and it isn't, don't add value - $sValue = ""; - } else if ($bWithArt) { - // If article will be added, set negative idcat as value - $sValue = "-".$iID; - } else { - // Show only categories - and everything is fine... - $sValue = $iID; - } - $oOption = new cHTMLOptionElement($sSpaces."> ".urldecode($oDB->f("name")), $sValue); + // Generate new option element + if (($bCatVisible && $oDB->f("visible") == 0) || ($bCatPublic && $oDB->f("public") == 0)) { + // If category has to be visible or public and it isn't, don't add value + $sValue = ""; + } else if ($bWithArt) { + // If article will be added, set negative idcat as value + $sValue = "-" . $iID; + } else { + // Show only categories - and everything is fine... + $sValue = $iID; + } + $oOption = new cHTMLOptionElement($sSpaces . "> " . urldecode($oDB->f("name")), $sValue); - // Coloring option element, restricted shows grey color - $oOption->setStyle("background-color: #EFEFEF"); - if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) { - $oOption->setStyle("color: #666666;"); - } + // Coloring option element, restricted shows grey color + $oOption->setStyle("background-color: #EFEFEF"); + if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) { + $oOption->setStyle("color: #666666;"); + } - // Add option element to the list - $this->addOptionElement($iCounter, $oOption); + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); - if ($bWithArt) { - $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces); - $iCount += $iArticles; - } - $iCounter = count($this->_options); - } - } - return $iCount; - } + if ($bWithArt) { + $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces); + $iCount += $iArticles; + } + $iCounter = count($this->_options); + } + } + return $iCount; + } - /** - * Function addTypesFromArt. Adds types and type ids which are available for the specified article - * - * @param int $iIDCatArt Article id - * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28') - * - * @return int Number of items added - **/ - function addTypesFromArt ($iIDCatArt, $sTypeRange = "") - { - global $cfg, $lang; + /** + * Function addTypesFromArt. Adds types and type ids which are available for the specified article + * + * @param int $iIDCatArt Article id + * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28') + * + * @return int Number of items added + * */ + function addTypesFromArt($iIDCatArt, $sTypeRange = "") { + global $cfg, $lang; - $oDB = new DB_ConLite; + $oDB = new DB_Contenido; - if (is_numeric($iIDCatArt) && $iIDCatArt > 0) - { - $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, "; - $sSQL .= "tblContent.value AS value "; - $sSQL .= "FROM ".$cfg["tab"]["content"]." AS tblContent, ".$cfg["tab"]["art_lang"]." AS tblArtLang, "; - $sSQL .= $cfg["tab"]["cat_art"]." AS tblCatArt, ".$cfg["tab"]["type"]." AS tblType "; - $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND "; - $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '". Contenido_Security::escapeDB($lang, $oDB)."' AND tblCatArt.idcatart = '". Contenido_Security::toInteger($iIDCatArt)."' "; + if (is_numeric($iIDCatArt) && $iIDCatArt > 0) { + $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, "; + $sSQL .= "tblContent.value AS value "; + $sSQL .= "FROM " . $cfg["tab"]["content"] . " AS tblContent, " . $cfg["tab"]["art_lang"] . " AS tblArtLang, "; + $sSQL .= $cfg["tab"]["cat_art"] . " AS tblCatArt, " . $cfg["tab"]["type"] . " AS tblType "; + $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND "; + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' AND tblCatArt.idcatart = '" . Contenido_Security::toInteger($iIDCatArt) . "' "; - if ($sTypeRange != "") { - $sSQL .= "AND tblContent.idtype IN (". Contenido_Security::escapeDB($sTypeRange, $oDB).") "; - } + if ($sTypeRange != "") { + $sSQL .= "AND tblContent.idtype IN (" . Contenido_Security::escapeDB($sTypeRange, $oDB) . ") "; + } - $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; + $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return false; - } else { - while ($oDB->next_record()) - { - $sTypeIdentifier = "tblData.idtype = '".$oDB->f('idtype')."' AND tblData.typeid = '".$oDB->f('typeid')."'"; + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + while ($oDB->next_record()) { + $sTypeIdentifier = "tblData.idtype = '" . $oDB->f('idtype') . "' AND tblData.typeid = '" . $oDB->f('typeid') . "'"; - // Generate new option element - $oOption = new cHTMLOptionElement($oDB->f('type')."[".$oDB->f('typeid')."]: ".substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier); + // Generate new option element + $oOption = new cHTMLOptionElement($oDB->f('type') . "[" . $oDB->f('typeid') . "]: " . substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier); - // Add option element to the list - $this->addOptionElement($sTypeIdentifier, $oOption); - } - return $iCount; - } - } else { - return false; - } - } + // Add option element to the list + $this->addOptionElement($sTypeIdentifier, $oOption); + } + return $iCount; + } + } else { + return false; + } + } + + /** + * Selects specified elements as selected + * + * @param array $aElements Array with "values" of the cHTMLOptionElement to set + * + * @return none + */ + function setSelected($aElements) { + if (is_array($this->_options) && is_array($aElements)) { + foreach ($this->_options as $sKey => $oOption) { + if (in_array($oOption->getAttribute("value"), $aElements)) { + $oOption->setSelected(true); + $this->_options[$sKey] = $oOption; + } else { + $oOption->setSelected(false); + $this->_options[$sKey] = $oOption; + } + } + } + } - /** - * Selects specified elements as selected - * - * @param array $aElements Array with "values" of the cHTMLOptionElement to set - * - * @return none - */ - function setSelected($aElements) - { - if (is_array($this->_options) && is_array($aElements)) - { - foreach ($this->_options as $sKey => $oOption) - { - if (in_array($oOption->getAttribute("value"), $aElements)) - { - $oOption->setSelected(true); - $this->_options[$sKey] = $oOption; - } else { - $oOption->setSelected(false); - $this->_options[$sKey] = $oOption; - } - } - } - } } -class UI_Config_Table -{ - var $_sTplCellCode; - var $_sTplTableFile; - - var $_sWidth; - var $_sBorder; - var $_sBorderColor; - var $_bSolidBorder; - var $_sPadding; - var $_aCells; - var $_aCellAlignment; - var $_aCellVAlignment; - var $_aCellColSpan; - var $_aCellClass; - var $_aRowBgColor; - var $_aRowExtra; - var $_bAddMultiSelJS; - - var $_sColorLight; - var $_sColorDark; +class UI_Config_Table { - function UI_Config_Table() - { - global $cfg; + var $_sTplCellCode; + var $_sTplTableFile; + var $_sWidth; + var $_sBorder; + var $_sBorderColor; + var $_bSolidBorder; + var $_sPadding; + var $_aCells; + var $_aCellAlignment; + var $_aCellVAlignment; + var $_aCellColSpan; + var $_aCellClass; + var $_aRowBgColor; + var $_aRowExtra; + var $_bAddMultiSelJS; + var $_sColorLight; + var $_sColorDark; - $this->_sPadding = 2; - $this->_sBorder = 0; - $this->_sBorderColor = $cfg['color']['table_border']; - $this->_sTplCellCode = ' {CONTENT}'."\n"; - $this->_sTplTableFile = $cfg['path']['contenido'].$cfg['path']['templates'].$cfg['templates']['generic_list']; - $this->_sColorLight = $cfg['color']['table_light']; - $this->_sColorDark = $cfg['color']['table_dark']; - } + function __construct() { + global $cfg; - function setCellTemplate($sCode) - { - $this->_sTplCellCode = $sCode; - } + $this->_sPadding = 2; + $this->_sBorder = 0; + $this->_sBorderColor = $cfg['color']['table_border']; + $this->_sTplCellCode = ' {CONTENT}' . "\n"; + $this->_sTplTableFile = $cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_list']; + $this->_sColorLight = $cfg['color']['table_light']; + $this->_sColorDark = $cfg['color']['table_dark']; + } + function setCellTemplate($sCode) { + $this->_sTplCellCode = $sCode; + } - function setTableTemplateFile($sPath) - { - $this->_sTplTableFile = $sPath; - } - - function setLightColor($sColor) - { - $this->_sColorLight = $sColor; - } - - function setDarkColor($sColor) - { - $this->_sColorDark = $sColor; - } + function setTableTemplateFile($sPath) { + $this->_sTplTableFile = $sPath; + } - function setAddMultiSelJS($bEnabled = true) - { - $this->_bAddMultiSelJS = (bool)$bEnabled; - } + function setLightColor($sColor) { + $this->_sColorLight = $sColor; + } - function setWidth ($sWidth) - { - $this->_sWidth = $sWidth; - } - - function setPadding ($sPadding) - { - $this->_sPadding = $sPadding; - } + function setDarkColor($sColor) { + $this->_sColorDark = $sColor; + } - function setBorder ($sBorder) - { - $this->_sBorder = $sBorder; - } + function setAddMultiSelJS($bEnabled = true) { + $this->_bAddMultiSelJS = (bool) $bEnabled; + } - function setBorderColor ($sBorderColor) - { - $this->_sBorderColor = $sBorderColor; - } - - function setSolidBorder ($bSolidBorder = true) - { - $this->_bSolidBorder = (bool)$bSolidBorder; - } + function setWidth($sWidth) { + $this->_sWidth = $sWidth; + } - function setCell ($sRow, $sCell, $sContent) - { - $this->_aCells[$sRow][$sCell] = $sContent; - $this->_aCellAlignment[$sRow][$sCell] = ""; - } + function setPadding($sPadding) { + $this->_sPadding = $sPadding; + } - function setCellAlignment ($sRow, $sCell, $sAlignment) - { - $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; - } + function setBorder($sBorder) { + $this->_sBorder = $sBorder; + } - function setCellVAlignment ($sRow, $sCell, $sAlignment) - { - $this->_aCellVAlignment[$sRow][$sCell] = $sAlignment; - } + function setBorderColor($sBorderColor) { + $this->_sBorderColor = $sBorderColor; + } - function setCellColspan ($sRow, $sCell, $iColSpan) - { - $this->_aCellColSpan[$sRow][$sCell] = $iColSpan; - } + function setSolidBorder($bSolidBorder = true) { + $this->_bSolidBorder = (bool) $bSolidBorder; + } - function setCellClass ($sRow, $sCell, $sClass) - { - $this->_aCellClass[$sRow][$sCell] = $sClass; - } + function setCell($sRow, $sCell, $sContent) { + $this->_aCells[$sRow][$sCell] = $sContent; + $this->_aCellAlignment[$sRow][$sCell] = ""; + } - function setRowBgColor ($sRow, $sColor) - { - $this->_aRowBgColor[$sRow] = $sColor; - } - - function setRowExtra ($sRow, $sExtra) - { - $this->_aRowExtra[$sRow] = $sExtra; - } + function setCellAlignment($sRow, $sCell, $sAlignment) { + $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; + } - function _addMultiSelJS() - { - // Trick: To save multiple selections in -Element, add some JS which saves the + // selection, comma separated in a hidden input field on change. + // Try ... catch prevents error messages, if function is added more than once + // if (!fncUpdateSel) in JS has not worked... - if ($this->_bSolidBorder) - { - if ($iCount < count($aCells)) - { - if ($iColCount < count($this->_aCells)) { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } else { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } - } else if ($iColCount < count($this->_aCells)) { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } else { - $sTplCell = str_replace('{EXTRA}', '', $sTplCell); - } - } - - if ($this->_aCellAlignment[$sRow][$sCell] != "") { - $sTplCell = str_replace('{ALIGN}', $this->_aCellAlignment[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{ALIGN}', 'left', $sTplCell); - } - - if ($this->_aCellVAlignment[$sRow][$sCell] != "") { - $sTplCell = str_replace('{VALIGN}', $this->_aCellVAlignment[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{VALIGN}', 'top', $sTplCell); - } + $sSkript = ' ' . "\n"; - if ($this->_aCellColSpan[$sRow][$sCell] != "") { - $sTplCell = str_replace('{COLSPAN}', $this->_aCellColSpan[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{COLSPAN}', '1', $sTplCell); - } + return $sSkript; + } - if ($this->_aCellClass[$sRow][$sCell] != "") { - $sTplCell = str_replace('{CLASS}', $this->_aCellClass[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{CLASS}', 'text', $sTplCell); - } + function render($bPrint = false) { + $oTable = new Template; + $oTable->reset(); - // Multi selection javascript - if ($this->_bAddMultiSelJS) { - $sData = $this->_addMultiSelJS() . $sData; - $this->_bAddMultiSelJS = false; - } + $oTable->set('s', 'CELLPADDING', $this->_sPadding); + $oTable->set('s', 'BORDER', $this->_sBorder); + $oTable->set('s', 'BORDERCOLOR', $this->_sBorderColor); + + $iColCount = 0; + $bDark = false; + $sBgColor = ""; + $bMultiSelJSAdded = false; + if (is_array($this->_aCells)) { + foreach ($this->_aCells as $sRow => $aCells) { + $iColCount++; + //$bDark = !$bDark; + $sLine = ""; + $iCount = 0; + + foreach ($aCells as $sCell => $sData) { + $iCount++; + $sTplCell = $this->_sTplCellCode; + + if ($this->_bSolidBorder) { + if ($iCount < count($aCells)) { + if ($iColCount < count($this->_aCells)) { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-bottom: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } else { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } + } else if ($iColCount < count($this->_aCells)) { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-bottom: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } else { + $sTplCell = str_replace('{EXTRA}', '', $sTplCell); + } + } + + if ($this->_aCellAlignment[$sRow][$sCell] != "") { + $sTplCell = str_replace('{ALIGN}', $this->_aCellAlignment[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{ALIGN}', 'left', $sTplCell); + } + + if ($this->_aCellVAlignment[$sRow][$sCell] != "") { + $sTplCell = str_replace('{VALIGN}', $this->_aCellVAlignment[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{VALIGN}', 'top', $sTplCell); + } + + if ($this->_aCellColSpan[$sRow][$sCell] != "") { + $sTplCell = str_replace('{COLSPAN}', $this->_aCellColSpan[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{COLSPAN}', '1', $sTplCell); + } + + if ($this->_aCellClass[$sRow][$sCell] != "") { + $sTplCell = str_replace('{CLASS}', $this->_aCellClass[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{CLASS}', 'text', $sTplCell); + } + + // Multi selection javascript + if ($this->_bAddMultiSelJS) { + $sData = $this->_addMultiSelJS() . $sData; + $this->_bAddMultiSelJS = false; + } + + $sTplCell = str_replace('{CONTENT}', $sData, $sTplCell); + $sLine .= $sTplCell; + } + + // Row + $oTable->set('d', 'ROWS', $sLine); + + if ($this->_aRowBgColor[$sRow] != "") { + $sBgColor = $this->_aRowBgColor[$sRow]; + } else if ($sBgColor == $this->_sColorLight) { + $sBgColor = $this->_sColorDark; + } else { + $sBgColor = $this->_sColorLight; + } + $oTable->set('d', 'BGCOLOR', $sBgColor); + + if ($this->_aRowExtra[$sRow] != "") { + $oTable->set('d', 'EXTRA', $this->_aRowExtra[$sRow]); + } else { + $oTable->set('d', 'EXTRA', ''); + } + + $oTable->next(); + } + } + + if ($this->_sWidth) { + // Table: Width + $oTable->set('s', 'EXTRA', 'width: ' . $this->_sWidth . ';'); + } else { + $oTable->set('s', 'EXTRA', ''); + } + $sRendered = $oTable->generate($this->_sTplTableFile, true, false); + + if ($bPrint == true) { + echo $sRendered; + } else { + return $sRendered; + } + } - $sTplCell = str_replace('{CONTENT}', $sData, $sTplCell); - $sLine .= $sTplCell; - } - - // Row - $oTable->set('d', 'ROWS', $sLine); - - if ($this->_aRowBgColor[$sRow] != "") { - $sBgColor = $this->_aRowBgColor[$sRow]; - } else if ($sBgColor == $this->_sColorLight) { - $sBgColor = $this->_sColorDark; - } else { - $sBgColor = $this->_sColorLight; - } - $oTable->set('d', 'BGCOLOR', $sBgColor); - - if ($this->_aRowExtra[$sRow] != "") { - $oTable->set('d', 'EXTRA', $this->_aRowExtra[$sRow]); - } else { - $oTable->set('d', 'EXTRA', ''); - } - - $oTable->next(); - } - } - - if ($this->_sWidth) { - // Table: Width - $oTable->set('s', 'EXTRA', 'width: '.$this->_sWidth.';'); - } else { - $oTable->set('s', 'EXTRA', ''); - } - $sRendered = $oTable->generate($this->_sTplTableFile, true, false); - - if ($bPrint == true) { - echo $sRendered; - } else { - return $sRendered; - } - } } + ?> \ No newline at end of file diff --git a/conlite/external/wysiwyg/tinymce3/editorclass.php b/conlite/external/wysiwyg/tinymce3/editorclass.php index d490389..ba47a5b 100644 --- a/conlite/external/wysiwyg/tinymce3/editorclass.php +++ b/conlite/external/wysiwyg/tinymce3/editorclass.php @@ -112,7 +112,7 @@ class cTinyMCEEditor extends cWYSIWYGEditor { } // GZIP - if ($this->_aSettings["contenido_gzip"] == "true") { + if (isset($this->_aSettings["contenido_gzip"]) && $this->_aSettings["contenido_gzip"] == "true") { $this->setGZIPMode(true); } else { $this->setGZIPMode(false); diff --git a/conlite/includes/ajax/include.ajax.con.php b/conlite/includes/ajax/include.ajax.con.php index 00c116f..db9e7bd 100644 --- a/conlite/includes/ajax/include.ajax.con.php +++ b/conlite/includes/ajax/include.ajax.con.php @@ -31,6 +31,8 @@ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } +$bDebug = false; + if (!$idcat) { $idcat = Contenido_Security::toInteger($_REQUEST['idcat']); } diff --git a/conlite/includes/functions.file.php b/conlite/includes/functions.file.php index 40877fe..85f2c18 100644 --- a/conlite/includes/functions.file.php +++ b/conlite/includes/functions.file.php @@ -210,7 +210,8 @@ function fileEdit($filename, $sCode, $path) { if (is_writable($path . $filename)) { if (strlen(stripslashes(trim($sCode))) > 0) { if (!empty($sCode)) { - $sCode = mb_convert_encoding($sCode, 'UTF-8', 'OLD-ENCODING'); + mb_detect_encoding($sCode); + $sCode = mb_convert_encoding($sCode, 'UTF-8',mb_detect_encoding($sCode)); } cFileHandler::write($path . $filename, $sCode); return true; @@ -235,7 +236,8 @@ function fileEdit($filename, $sCode, $path) { function getFileContent($filename, $path) { $sCode = cFileHandler::read($path . $filename); if (!empty($sCode)) { - $sCode = mb_convert_encoding($sCode, 'UTF-8', 'OLD-ENCODING'); + mb_detect_encoding($sCode); + $sCode = mb_convert_encoding($sCode, 'UTF-8', mb_detect_encoding($sCode)); } return $sCode; } diff --git a/conlite/includes/include.con_art_overview.php b/conlite/includes/include.con_art_overview.php index e0e092d..047728a 100644 --- a/conlite/includes/include.con_art_overview.php +++ b/conlite/includes/include.con_art_overview.php @@ -475,7 +475,7 @@ if (is_numeric($idcat) && ($idcat >= 0)) { } $imgsrc .= '.gif'; - + $tmp_img = ''; if (($perm->have_perm_area_action("con", "con_makestart") || $perm->have_perm_area_action_item("con", "con_makestart", $idcat)) && $idcat != 0) { if ($is_start == false) { $tmp_link = '' . i18n('; diff --git a/conlite/includes/include.con_edit_form.php b/conlite/includes/include.con_edit_form.php index f4e8a5b..13fb349 100644 --- a/conlite/includes/include.con_edit_form.php +++ b/conlite/includes/include.con_edit_form.php @@ -596,7 +596,8 @@ if ($action == "con_newart" && $newart != true) { '; foreach ($availableTags as $key => $value) { - $tpl->set('d', 'METAINPUT', 'META' . $value); + // @todo seems to be unused, check if we can delete it (op 17.05.2022) + //$tpl->set('d', 'METAINPUT', 'META' . $value); switch ($value["fieldtype"]) { case "text": diff --git a/conlite/includes/include.con_left_top.php b/conlite/includes/include.con_left_top.php index 68aa207..dc1dd54 100644 --- a/conlite/includes/include.con_left_top.php +++ b/conlite/includes/include.con_left_top.php @@ -1,4 +1,5 @@ reset(); global $sess, $frame, $area; -$idcat = ( isset($_GET['idcat']) && is_numeric($_GET['idcat'])) ? $_GET['idcat'] : -1; +$idcat = ( isset($_GET['idcat']) && is_numeric($_GET['idcat'])) ? $_GET['idcat'] : -1; //Get sync options -if (isset($syncoptions)) -{ - $syncfrom = (int) $syncoptions; - $remakeCatTable = true; +if (isset($syncoptions)) { + $syncfrom = (int) $syncoptions; + $remakeCatTable = true; } -if (!isset($syncfrom)) -{ - $syncfrom = -1; +if (!isset($syncfrom)) { + $syncfrom = -1; } $syncoptions = $syncfrom; $oTpl->set('s', 'SYNC_LANG', $syncfrom); - ########################################## # Delete a saved search ########################################## $bShowArticleSearch = false; -if( isset($_GET['delsavedsearch']) ) -{ - if( isset($_GET['itemtype']) && sizeof($_GET['itemtype'])>0 && isset($_GET['itemid']) && sizeof($_GET['itemid'])>0 ) - { - $propertyCollection = new PropertyCollection; - $propertyCollection->deleteProperties($_GET['itemtype'], $_GET['itemid']); - $bShowArticleSearch = true; - } +if (isset($_GET['delsavedsearch'])) { + if (isset($_GET['itemtype']) && sizeof($_GET['itemtype']) > 0 && isset($_GET['itemid']) && sizeof($_GET['itemid']) > 0) { + $propertyCollection = new PropertyCollection; + $propertyCollection->deleteProperties($_GET['itemtype'], $_GET['itemid']); + $bShowArticleSearch = true; + } } -if( isset($_GET['save_search']) && $_GET['save_search'] == 'true') { - $bShowArticleSearch = true; +if (isset($_GET['save_search']) && $_GET['save_search'] == 'true') { + $bShowArticleSearch = true; } @@ -91,22 +86,22 @@ if( isset($_GET['save_search']) && $_GET['save_search'] == 'true') { # modified 20/04/2007 by H. Librenz for backend search $arrDays = array(); -for ($i = 0; $i < 32; $i ++) { - if ($i == 0) { - $arrDays[$i] = '--'; - } else { - $arrDays[$i] = $i; - } +for ($i = 0; $i < 32; $i++) { + if ($i == 0) { + $arrDays[$i] = '--'; + } else { + $arrDays[$i] = $i; + } } $arrMonths = array(); for ($i = 0; $i < 13; $i++) { - if ($i == 0) { - $arrMonths[$i] = '--'; - } else { - $arrMonths[$i] = $i; - } + if ($i == 0) { + $arrMonths[$i] = '--'; + } else { + $arrMonths[$i] = $i; + } } $arrYears = array(); @@ -114,20 +109,20 @@ $arrYears = array(); $arrYears[0] = '-----'; $sActualYear = (int) date("Y"); -for ($i = $sActualYear-10; $i < $sActualYear+30; $i++) { - $arrYears[$i] = $i; +for ($i = $sActualYear - 10; $i < $sActualYear + 30; $i++) { + $arrYears[$i] = $i; } $arrUsers = array(); -$query = "SELECT * FROM ".$cfg['tab']['phplib_auth_user_md5']." ORDER BY realname"; +$query = "SELECT * FROM " . $cfg['tab']['phplib_auth_user_md5'] . " ORDER BY realname"; $arrUsers['n/a'] = '-'; $db->query($query); while ($db->next_record()) { - $arrUsers[$db->f('username')] = $db->f('realname'); + $arrUsers[$db->f('username')] = $db->f('realname'); } $arrDateTypes = array(); @@ -137,16 +132,16 @@ $arrDateTypes['created'] = i18n('Date created'); $arrDateTypes['lastmodified'] = i18n('Date modified'); $arrDateTypes['published'] = i18n('Date published'); -$articleLink="editarticle"; +$articleLink = "editarticle"; $oListOptionRow = new cFoldingRow("3498dbba-ed4a-4618-8e49-3a3635396e22", i18n("Article Search"), $articleLink, $bShowArticleSearch); $oTpl->set('s', 'ARTICLELINK', $articleLink); #Textfeld -$oTextboxArtTitle = new cHTMLTextbox("bs_search_text", (isset($_REQUEST["bs_search_text"])?$_REQUEST["bs_search_text"]:''), 10); +$oTextboxArtTitle = new cHTMLTextbox("bs_search_text", (isset($_REQUEST["bs_search_text"]) ? $_REQUEST["bs_search_text"] : ''), 10); $oTextboxArtTitle->setStyle('width:135px;'); #Artikel_ID-Feld -$oTextboxArtID = new cHTMLTextbox("bs_search_id", (isset($_REQUEST["bs_search_id"])?$_REQUEST["bs_search_id"]:''), 10); +$oTextboxArtID = new cHTMLTextbox("bs_search_id", (isset($_REQUEST["bs_search_id"]) ? $_REQUEST["bs_search_id"] : ''), 10); $oTextboxArtID->setStyle('width:135px;'); #Date type @@ -155,10 +150,10 @@ $oSelectArtDateType->autoFill($arrDateTypes); $oSelectArtDateType->setStyle('width:135px;'); $oSelectArtDateType->setEvent("Change", "toggle_tr_visibility('tr_date_from');toggle_tr_visibility('tr_date_to');"); -if (isset($_REQUEST["bs_search_date_type"]) && $_REQUEST["bs_search_date_type"] !='') { - $oSelectArtDateType->setDefault($_REQUEST["bs_search_date_type"]); +if (isset($_REQUEST["bs_search_date_type"]) && $_REQUEST["bs_search_date_type"] != '') { + $oSelectArtDateType->setDefault($_REQUEST["bs_search_date_type"]); } else { - $oSelectArtDateType->setDefault('n/a'); + $oSelectArtDateType->setDefault('n/a'); } #DateFrom @@ -175,21 +170,21 @@ $oSelectArtDateFromYear->setStyle('width:55px;'); $oSelectArtDateFromYear->autoFill($arrYears); if (isset($_REQUEST["bs_search_date_from_day"]) && $_REQUEST["bs_search_date_from_day"] > 0) { - $oSelectArtDateFromDay->setDefault($_REQUEST["bs_search_date_from_day"]); + $oSelectArtDateFromDay->setDefault($_REQUEST["bs_search_date_from_day"]); } else { - $oSelectArtDateFromDay->setDefault(0); + $oSelectArtDateFromDay->setDefault(0); } if (isset($_REQUEST["bs_search_date_from_month"]) && $_REQUEST["bs_search_date_from_month"] > 0) { - $oSelectArtDateFromMonth->setDefault($_REQUEST["bs_search_date_from_month"]); + $oSelectArtDateFromMonth->setDefault($_REQUEST["bs_search_date_from_month"]); } else { - $oSelectArtDateFromMonth->setDefault(0); + $oSelectArtDateFromMonth->setDefault(0); } if (isset($_REQUEST["bs_search_date_from_year"]) && $_REQUEST["bs_search_date_from_year"] > 0) { - $oSelectArtDateFromYear->setDefault($_REQUEST["bs_search_date_from_year"]); + $oSelectArtDateFromYear->setDefault($_REQUEST["bs_search_date_from_year"]); } else { - $oSelectArtDateFromYear->setDefault(0); + $oSelectArtDateFromYear->setDefault(0); } #DateTo @@ -206,21 +201,21 @@ $oSelectArtDateToYear->setStyle('width:55px;'); $oSelectArtDateToYear->autoFill($arrYears); if (isset($_REQUEST["bs_search_date_to_day"]) && $_REQUEST["bs_search_date_to_day"] > 0) { - $oSelectArtDateToDay->setDefault($_REQUEST["bs_search_date_to_day"]); + $oSelectArtDateToDay->setDefault($_REQUEST["bs_search_date_to_day"]); } else { - $oSelectArtDateToDay->setDefault(0); + $oSelectArtDateToDay->setDefault(0); } if (isset($_REQUEST["bs_search_date_to_month"]) && $_REQUEST["bs_search_date_to_month"] > 0) { - $oSelectArtDateToMonth->setDefault($_REQUEST["bs_search_date_to_month"]); + $oSelectArtDateToMonth->setDefault($_REQUEST["bs_search_date_to_month"]); } else { - $oSelectArtDateToMonth->setDefault(0); + $oSelectArtDateToMonth->setDefault(0); } if (isset($_REQUEST["bs_search_date_to_year"]) && $_REQUEST["bs_search_date_to_year"] > 0) { - $oSelectArtDateToYear->setDefault($_REQUEST["bs_search_date_to_year"]); + $oSelectArtDateToYear->setDefault($_REQUEST["bs_search_date_to_year"]); } else { - $oSelectArtDateToYear->setDefault(0); + $oSelectArtDateToYear->setDefault(0); } #Author @@ -228,57 +223,56 @@ $oSelectArtAuthor = new cHTMLSelectElement("bs_search_author"); $oSelectArtAuthor->setStyle('width:135px;'); $oSelectArtAuthor->autoFill($arrUsers); -if (isset($_REQUEST["bs_search_author"]) && $_REQUEST["bs_search_author"] !='') { - $oSelectArtAuthor->setDefault($_REQUEST["bs_search_author"]); +if (isset($_REQUEST["bs_search_author"]) && $_REQUEST["bs_search_author"] != '') { + $oSelectArtAuthor->setDefault($_REQUEST["bs_search_author"]); } else { - $oSelectArtAuthor->setDefault('n/a'); + $oSelectArtAuthor->setDefault('n/a'); } $oSubmit = new cHTMLButton("submit", i18n("Search")); -$content = '
'; +$content = '
'; $content .= ''; @@ -288,7 +282,7 @@ $content .= ''; */ $content .= ''; @@ -351,38 +342,37 @@ $sql = "SELECT idtpl, name FROM - ".$cfg['tab']['tpl']." + " . $cfg['tab']['tpl'] . " WHERE - idclient = '".Contenido_Security::toInteger($client)."' + idclient = '" . Contenido_Security::toInteger($client) . "' ORDER BY name"; $db->query($sql); -$oTpl->set('s', 'ID', 'oTplSel'); -$oTpl->set('s', 'CLASS', 'text_medium'); -$oTpl->set('s', 'OPTIONS', ''); -$oTpl->set('s', 'SESSID', $sess->id); +$oTpl->set('s', 'ID', 'oTplSel'); +$oTpl->set('s', 'CLASS', 'text_medium'); +$oTpl->set('s', 'OPTIONS', ''); +$oTpl->set('s', 'SESSID', $sess->id); $oTpl->set('s', 'BELANG', $belang); -$oTpl->set('d', 'VALUE', '0'); -$oTpl->set('d', 'CAPTION', i18n("Choose template")); -$oTpl->set('d', 'SELECTED', ''); +$oTpl->set('d', 'VALUE', '0'); +$oTpl->set('d', 'CAPTION', i18n("Choose template")); +$oTpl->set('d', 'SELECTED', ''); $oTpl->next(); -$oTpl->set('d', 'VALUE', '0'); -$oTpl->set('d', 'CAPTION', '--- '. i18n("none"). ' ---'); -$oTpl->set('d', 'SELECTED', ''); +$oTpl->set('d', 'VALUE', '0'); +$oTpl->set('d', 'CAPTION', '--- ' . i18n("none") . ' ---'); +$oTpl->set('d', 'SELECTED', ''); $oTpl->next(); -$categoryLink="editcat"; +$categoryLink = "editcat"; $editCategory = new cFoldingRow("3498dbbb-ed4a-4618-8e49-3a3635396e22", i18n("Edit Category"), $categoryLink); while ($db->next_record()) { $oTplname = $db->f('name'); - if (strlen($oTplname) > 18) - { + if (strlen($oTplname) > 18) { $oTplname = substr($oTplname, 0, 15) . "..."; } $oTpl->set('d', 'VALUE', $db->f('idtpl')); @@ -391,25 +381,25 @@ while ($db->next_record()) { $oTpl->next(); } // Template Dropdown -$editCat = '
'; -$editCat .= i18n("Template:") . "
"; -$editCat .= '
'; -$editCat .= $oTpl->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true); -$editCat .='
'; -$editCat .= '
'; +$editCat = '
'; +$editCat .= i18n("Template:") . "
"; +$editCat .= '
'; +$editCat .= $oTpl->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true); +$editCat .= '
'; +$editCat .= '
'; // Category -$editCat .= '
'; -$oTpl->set('s', 'CAT_HREF', $sess->url("main.php?area=con_tplcfg&action=tplcfg_edit&frame=4&mode=art").'&idcat='); +$editCat .= '
'; +$oTpl->set('s', 'CAT_HREF', $sess->url("main.php?area=con_tplcfg&action=tplcfg_edit&frame=4&mode=art") . '&idcat='); $oTpl->set('s', 'IDCAT', $idcat); -$editCat .= ''; +$editCat .= ''; // Online / Offline -$editCat .= ''; +$editCat .= ''; // Lock / Unlock -$editCat .= '
'.i18n('; -$editCat .= ''.i18n("Lock / Unlock").'
'; -$editCat .= '
'; +$editCat .= ''; +$editCat .= '
'; $editCat .= '
'; $editCat .= '
'; @@ -418,95 +408,90 @@ $editCategory->setContentData($editCat); $oTpl->set('s', 'EDIT', $editCategory->render()); $oTpl->set('s', 'CATEGORYLINK', $categoryLink); - ##################################### # Collapse / Expand / Config Category ##################################### $selflink = "main.php"; $expandlink = $sess->url($selflink . "?area=$area&frame=2&expand=all"); $collapselink = $sess->url($selflink . "?area=$area&frame=2&collapse=all"); -$collapseimg = ' '.i18n("close all").''; -$expandimg = ' '.i18n("open all").''; +$collapseimg = ' ' . i18n("close all") . ''; +$expandimg = ' ' . i18n("open all") . ''; $oTpl->set('s', 'MINUS', $collapseimg); $oTpl->set('s', 'PLUS', $expandimg); -/**************/ +/* * *********** */ /* SYNCSTUFF */ -/**************/ +/* * *********** */ $languages = getLanguageNamesByClient($client); +$sListId = ''; if (count($languages) > 1 && $perm->have_perm_area_action($area, "con_synccat")) { - $sListId = 'sync'; - $oListOptionRow = new cFoldingRow("4808dbba-ed4a-4618-8e49-3a3635396e22", i18n("Synchronize from"), $sListId); - - if (($syncoptions > 0) && ($syncoptions != $lang)) { - $oListOptionRow->setExpanded (true); - } - + $sListId = 'sync'; + $oListOptionRow = new cFoldingRow("4808dbba-ed4a-4618-8e49-3a3635396e22", i18n("Synchronize from"), $sListId); + + if (($syncoptions > 0) && ($syncoptions != $lang)) { + $oListOptionRow->setExpanded(true); + } + #'dir="' . langGetTextDirection($lang) . '"'); $selectbox = new cHTMLSelectElement("syncoptions"); - - $option = new cHTMLOptionElement("--- ".i18n("None")." ---", -1); + + $option = new cHTMLOptionElement("--- " . i18n("None") . " ---", -1); $selectbox->addOptionElement(-1, $option); - - foreach ($languages as $languageid => $languagename) - { - if ($lang != $languageid && $perm->have_perm_client_lang($client, $languageid)) - { - $option = new cHTMLOptionElement($languagename . " (".$languageid.")",$languageid); - $selectbox->addOptionElement($languageid, $option); - } + + foreach ($languages as $languageid => $languagename) { + if ($lang != $languageid && $perm->have_perm_client_lang($client, $languageid)) { + $option = new cHTMLOptionElement($languagename . " (" . $languageid . ")", $languageid); + $selectbox->addOptionElement($languageid, $option); + } } - + $selectbox->setDefault($syncoptions); $form = new UI_Form("syncfrom"); - $form->setVar("area",$area); + $form->setVar("area", $area); $form->setVar("frame", $frame); $form->add("sel", $selectbox->render()); - $link = $sess->url("main.php?area=".$area."&frame=2").'&syncoptions='; - $sJsLink = 'conMultiLink(\'left_bottom\', \''.$link.'\'+document.getElementsByName(\'syncoptions\')[0].value+\'&refresh_syncoptions=true\');'; - $oTpl->set('s', 'UPDATE_SYNC_REFRESH_FRAMES', $sJsLink); - - $form->add("submit", ''); + $link = $sess->url("main.php?area=" . $area . "&frame=2") . '&syncoptions='; + $sJsLink = 'conMultiLink(\'left_bottom\', \'' . $link . '\'+document.getElementsByName(\'syncoptions\')[0].value+\'&refresh_syncoptions=true\');'; + $oTpl->set('s', 'UPDATE_SYNC_REFRESH_FRAMES', $sJsLink); - $sSyncButton = ''; - $sSyncButtonMultiple = ''; - - $content = ' + $form->add("submit", ''); + + $sSyncButton = ''; + $sSyncButtonMultiple = ''; + + $content = '
- + - + -
'.$form->render().'' . $form->render() . '
'.$sSyncButton.$sSyncButtonMultiple.'' . $sSyncButton . $sSyncButtonMultiple . '
'; + '; $oListOptionRow->setContentData($content); - $oTpl->set('s', 'SYNCRONIZATION',$oListOptionRow->render()); + $oTpl->set('s', 'SYNCRONIZATION', $oListOptionRow->render()); $oTpl->set('s', 'SYNCLINK', $sListId); - $sSyncLink = $sess->url($selflink . "?area=$area&frame=2&action=con_synccat"); - $oTpl->set('s', 'SYNC_HREF', $sSyncLink); - + $sSyncLink = $sess->url($selflink . "?area=$area&frame=2&action=con_synccat"); + $oTpl->set('s', 'SYNC_HREF', $sSyncLink); } else { - $oTpl->set('s', 'SYNCRONIZATION',''); - $oTpl->set('s', 'SYNCLINK',$sListId); - $oTpl->set('s', 'SYNC_HREF', ''); + $oTpl->set('s', 'SYNCRONIZATION', ''); + $oTpl->set('s', 'SYNCLINK', $sListId); + $oTpl->set('s', 'SYNC_HREF', ''); } /* * necessary for expanding/collapsing of navigation tree per javascript/AJAX (I. van Peeren) - */ + */ $oTpl->set('s', 'AREA', $area); $oTpl->set('s', 'SESSION', $contenido); -$oTpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'].'ajaxmain.php'); +$oTpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'] . 'ajaxmain.php'); ########################################## # Help ########################################## $oTpl->set('s', 'HELPSCRIPT', setHelpContext("con")); -$oTpl->generate($cfg['path']['templates'] . $cfg['templates']['con_left_top']); - -?> \ No newline at end of file +$oTpl->generate($cfg['path']['templates'] . $cfg['templates']['con_left_top']); \ No newline at end of file diff --git a/conlite/includes/include.frontend.group_edit.php b/conlite/includes/include.frontend.group_edit.php index 8757fe8..6ca9801 100644 --- a/conlite/includes/include.frontend.group_edit.php +++ b/conlite/includes/include.frontend.group_edit.php @@ -158,7 +158,7 @@ if ($fegroup->virgin == false && $fegroup->get("idclient") == $client) $fegroup->store(); } - if (count($messages) > 0) + if (is_array($messages) && count($messages) > 0) { $notis = $notification->returnNotification("warning", implode("
", $messages)) . "
"; } diff --git a/conlite/includes/include.frontend.group_rights.php b/conlite/includes/include.frontend.group_rights.php index 45f93ef..e0e822a 100644 --- a/conlite/includes/include.frontend.group_rights.php +++ b/conlite/includes/include.frontend.group_rights.php @@ -1,4 +1,5 @@ setContent(i18n("Invalid plugin")); - +if (!in_array($useplugin, $cfg['plugins']['frontendlogic'])) { + $page->setContent(i18n("Invalid plugin")); } else { - cInclude("plugins", "frontendlogic/$useplugin/".$useplugin.".php"); + cInclude("plugins", "frontendlogic/$useplugin/" . $useplugin . ".php"); - $className = "frontendlogic_".$useplugin; - $class = new $className; - $perms = new FrontendPermissionCollection; + $className = "frontendlogic_" . $useplugin; + $class = new $className; + $perms = new FrontendPermissionCollection; + $rights = new UI_Table_Form("rights"); + $rights->setVar("area", $area); + $rights->setVar("frame", $frame); + $rights->setVar("useplugin", $useplugin); + $rights->setVar("idfrontendgroup", $idfrontendgroup); + $rights->setVar("action", "fegroups_save_perm"); - $rights = new UI_Table_Form("rights"); - $rights->setVar("area", $area); - $rights->setVar("frame", $frame); - $rights->setVar("useplugin", $useplugin); - $rights->setVar("idfrontendgroup", $idfrontendgroup); - $rights->setVar("action", "fegroups_save_perm"); + $actions = $class->listActions(); + $items = $class->listItems(); - $actions = $class->listActions(); - $items = $class->listItems(); + if ($action == "fegroups_save_perm") { + $myitems = $items; + $myitems["__GLOBAL__"] = "__GLOBAL__"; - if ($action == "fegroups_save_perm") - { - $myitems = $items; - $myitems["__GLOBAL__"] = "__GLOBAL__"; + foreach ($actions as $action => $text) { + foreach ($myitems as $item => $text) { - foreach ($actions as $action => $text) - { - foreach ($myitems as $item => $text) - { + if ($item === "__GLOBAL__") { + $varname = "action_$action"; + } else { + $varname = "item_" . $item . "_$action"; + } - if ($item === "__GLOBAL__") - { - $varname = "action_$action"; - } else { - $varname = "item_".$item."_$action"; - } - - if ($_POST[$varname] == 1) - { - $perms->setPerm($idfrontendgroup, $useplugin, $action, $item); - } else { - $perms->removePerm($idfrontendgroup, $useplugin, $action, $item); - } - } - } - - } - - $rights->addHeader(sprintf(i18n("Permissions for plugin '%s'"), $class->getFriendlyName())); - - foreach ($actions as $key => $action) - { - $check[$key] = new cHTMLCheckbox("action_$key", 1); - $check[$key]->setLabelText($action." ".i18n("(All)")); - - if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, "__GLOBAL__")) - { - $check[$key]->setChecked(true); - } - } - - $rights->add(i18n("Global rights"), $check); - - foreach ($actions as $key => $action) - { - unset($check); - - if (count($items) > 0) - { - foreach ($items as $item => $value) - { - $check[$item] = new cHTMLCheckbox("item_".$item."_".$key, 1); - $check[$item]->setLabelText($value); - - if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, $item)) - { - $check[$item]->setChecked(true); - } - - } - - $rights->add($action, $check); - } else { - $rights->add($action, i18n("No items found")); - } + if ($_POST[$varname] == 1) { + $perms->setPerm($idfrontendgroup, $useplugin, $action, $item); + } else { + $perms->removePerm($idfrontendgroup, $useplugin, $action, $item); + } + } + } } - $page->setContent($rights->render()); + $rights->addHeader(sprintf(i18n("Permissions for plugin '%s'"), $class->getFriendlyName())); + + foreach ($actions as $key => $action) { + $check[$key] = new cHTMLCheckbox("action_$key", 1); + $check[$key]->setLabelText($action . " " . i18n("(All)")); + + if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, "__GLOBAL__")) { + $check[$key]->setChecked(true); + } + } + + $rights->add(i18n("Global rights"), $check); + + foreach ($actions as $key => $action) { + unset($check); + + if (is_array($items) && count($items) > 0) { + foreach ($items as $item => $value) { + $check[$item] = new cHTMLCheckbox("item_" . $item . "_" . $key, 1); + $check[$item]->setLabelText($value); + + if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, $item)) { + $check[$item]->setChecked(true); + } + } + + $rights->add($action, $check); + } else { + $rights->add($action, i18n("No items found")); + } + } + + $page->setContent($rights->render()); } -$page->render(); -?> \ No newline at end of file +$page->render(); \ No newline at end of file diff --git a/conlite/includes/include.frontend.user_edit.php b/conlite/includes/include.frontend.user_edit.php index 468c52a..7381b9a 100644 --- a/conlite/includes/include.frontend.user_edit.php +++ b/conlite/includes/include.frontend.user_edit.php @@ -162,7 +162,7 @@ if ($oFeUser->virgin == false && $oFeUser->get("idclient") == $client) { if($bStore) $oFeUser->store(); } - if (count($messages) > 0) { + if (is_array($messages) && count($messages) > 0) { $notis = $notification->returnNotification("warning", implode("
", $messages)) . "
"; } diff --git a/conlite/includes/include.lay_edit_form.php b/conlite/includes/include.lay_edit_form.php index 208ce06..42c65cb 100644 --- a/conlite/includes/include.lay_edit_form.php +++ b/conlite/includes/include.lay_edit_form.php @@ -107,7 +107,7 @@ if (!$layout->virgin) { } $types = array_unique($types); - if (version_compare(PHP_VERSION, '8.0.0', '>=')) { + if (version_compare(PHP_VERSION, '7.4.0', '>=')) { $layout->setProperty("layout", "used-types", implode(";", $types)); } else { $layout->setProperty("layout", "used-types", implode($types, ";")); diff --git a/conlite/includes/include.tplcfg_edit_form.php b/conlite/includes/include.tplcfg_edit_form.php index 8b09a28..68578b6 100644 --- a/conlite/includes/include.tplcfg_edit_form.php +++ b/conlite/includes/include.tplcfg_edit_form.php @@ -278,7 +278,7 @@ $tpl->set('s', 'TEMPLATECAPTION', i18n("Template")); $tpl2 = new Template; $tpl2->set('s', 'NAME', 'idtpl'); $tpl2->set('s', 'CLASS', 'text_medium'); - +$disabled2 = ''; if (!$perm->have_perm_area_action_item("con", "con_changetemplate", $idcat)) { $disabled2 = 'disabled="disabled"'; } diff --git a/conlite/includes/main.login.php b/conlite/includes/main.login.php index ef73da7..8e5171a 100644 --- a/conlite/includes/main.login.php +++ b/conlite/includes/main.login.php @@ -1,4 +1,5 @@ reset(); if ($saveLoginTime == true) { - $sess->register("saveLoginTime"); - $saveLoginTime= 0; + $sess->register("saveLoginTime"); + $saveLoginTime = 0; - $vuser= new User(); + $vuser = new User(); - $vuser->loadUserByUserID($auth->auth["uid"]); - - $lastTime= $vuser->getUserProperty("system", "currentlogintime"); - $timestamp= date("Y-m-d H:i:s"); - $vuser->setUserProperty("system", "currentlogintime", $timestamp); - $vuser->setUserProperty("system", "lastlogintime", $lastTime); + $vuser->loadUserByUserID($auth->auth["uid"]); + $lastTime = $vuser->getUserProperty("system", "currentlogintime"); + $timestamp = date("Y-m-d H:i:s"); + $vuser->setUserProperty("system", "currentlogintime", $timestamp); + $vuser->setUserProperty("system", "lastlogintime", $lastTime); } -$vuser= new User(); +$vuser = new User(); $vuser->loadUserByUserID($auth->auth["uid"]); -$lastlogin= $vuser->getUserProperty("system", "lastlogintime"); +$lastlogin = $vuser->getUserProperty("system", "lastlogintime"); if ($lastlogin == "") { - $lastlogin= i18n("No Login Information available."); + $lastlogin = i18n("No Login Information available."); } $aNotifications = array(); // notification for requested password -if($vuser->getField('using_pw_request') == 1) { +if ($vuser->getField('using_pw_request') == 1) { //$sPwNoti = $notification->returnNotification("warning", i18n("You're logged in with a temporary password. Please change your password.")); $aNotifications[] = i18n("You're logged in with a temporary password. Please change your password."); } // Check, if setup folder is still available -if (file_exists(dirname(dirname(dirname(__FILE__)))."/setup")) { - $aNotifications[] = i18n("The setup directory still exists. Please remove the setup directory before you continue."); +if (file_exists(dirname(dirname(dirname(__FILE__))) . "/setup")) { + $aNotifications[] = i18n("The setup directory still exists. Please remove the setup directory before you continue."); } // Check, if sysadmin and/or admin accounts are still using well-known default passwords $sDate = date('Y-m-d'); -$sSQL = "SELECT * FROM ".$cfg["tab"]["phplib_auth_user_md5"]." +$sSQL = "SELECT * FROM " . $cfg["tab"]["phplib_auth_user_md5"] . " WHERE (username = 'sysadmin' AND password = '48a365b4ce1e322a55ae9017f3daf0c0' - AND (valid_from <= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND - (valid_to >= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_to = '0000-00-00' OR valid_to is NULL)) + AND (valid_from <= '" . Contenido_Security::escapeDB($sDate, $db) . "' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND + (valid_to >= '" . Contenido_Security::escapeDB($sDate, $db) . "' OR valid_to = '0000-00-00' OR valid_to is NULL)) OR (username = 'admin' AND password = '21232f297a57a5a743894a0e4a801fc3' - AND (valid_from <= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND - (valid_to >= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_to = '0000-00-00' OR valid_to = '1000-01-01' OR valid_to is NULL)) + AND (valid_from <= '" . Contenido_Security::escapeDB($sDate, $db) . "' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND + (valid_to >= '" . Contenido_Security::escapeDB($sDate, $db) . "' OR valid_to = '0000-00-00' OR valid_to = '1000-01-01' OR valid_to is NULL)) "; $db->query($sSQL); @@ -97,7 +96,7 @@ if ($db->num_rows() > 0) { if (count($aNotifications) > 0) { $oNotification = new Contenido_Notification(); - $sNotification = $oNotification->messageBox("warning", implode("
", $aNotifications), 1). "
"; + $sNotification = $oNotification->messageBox("warning", implode("
", $aNotifications), 1) . "
"; } else { $sNotification = ""; } @@ -109,128 +108,126 @@ $userid = $auth->auth["uid"]; $oTpl->set('s', 'WELCOME', "" . i18n("Welcome") . " " . $vuser->getRealname($userid, true) . "."); $oTpl->set('s', 'LASTLOGIN', i18n("Last login") . ": " . $lastlogin); -$clients= $classclient->getAccessibleClients(); +$clients = $classclient->getAccessibleClients(); -$cApiClient= new cApiClient; -$warnings= array (); +$cApiClient = new cApiClient; +$warnings = array(); if (count($clients) > 1) { - $clientform= '
'; - $select= new cHTMLSelectElement("changeclient"); - $choices= array (); - foreach ($clients as $key => $v_client) { - if ($perm->hasClientPermission($key)) { + $clientform = ''; + $select = new cHTMLSelectElement("changeclient"); + $choices = array(); + foreach ($clients as $key => $v_client) { + if ($perm->hasClientPermission($key)) { - $cApiClient->loadByPrimaryKey($key); - if ($cApiClient->hasLanguages()) { - $choices[$key]= $v_client['name'] . " (" . $key . ')'; - } else { - $warnings[]= sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); - } - - } - } - - $select->autoFill($choices); - $select->setDefault($client); - - $clientselect= $select->render(); - - $oTpl->set('s', 'CLIENTFORM', $clientform); - $oTpl->set('s', 'CLIENTFORMCLOSE', "
"); - $oTpl->set('s', 'CLIENTSDROPDOWN', $clientselect); - - if ($perm->have_perm() && count($warnings) > 0) { - $oTpl->set('s', 'WARNINGS', "
" . $notification->messageBox("warning", implode("
", $warnings), 0)); - } else { - $oTpl->set('s', 'WARNINGS', ''); - } - $oTpl->set('s', 'OKBUTTON', ''); -} else { - $oTpl->set('s', 'OKBUTTON', ''); - $sClientForm = ''; - if ( count($clients) == 0 ) { - $sClientForm = i18n('No clients available!'); - } - $oTpl->set('s', 'CLIENTFORM', $sClientForm); - $oTpl->set('s', 'CLIENTFORMCLOSE', ''); - - - foreach ($clients as $key => $v_client) { - if ($perm->hasClientPermission($key)) { - $cApiClient->loadByPrimaryKey($key); - if ($cApiClient->hasLanguages()) { - $name= $v_client['name'] . " (" . $key . ')'; - } else { - $warnings[]= sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); - } + $cApiClient->loadByPrimaryKey($key); + if ($cApiClient->hasLanguages()) { + $choices[$key] = $v_client['name'] . " (" . $key . ')'; + } else { + $warnings[] = sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); } - } - + } + } + + $select->autoFill($choices); + $select->setDefault($client); + + $clientselect = $select->render(); + + $oTpl->set('s', 'CLIENTFORM', $clientform); + $oTpl->set('s', 'CLIENTFORMCLOSE', ""); + $oTpl->set('s', 'CLIENTSDROPDOWN', $clientselect); + if ($perm->have_perm() && count($warnings) > 0) { - $oTpl->set('s', 'WARNINGS', "
" . $notification->messageBox("warning", implode("
", $warnings), 0)); - } else { - $oTpl->set('s', 'WARNINGS', ''); - } - - $oTpl->set('s', 'CLIENTSDROPDOWN', $name); + $oTpl->set('s', 'WARNINGS', "
" . $notification->messageBox("warning", implode("
", $warnings), 0)); + } else { + $oTpl->set('s', 'WARNINGS', ''); + } + $oTpl->set('s', 'OKBUTTON', ''); +} else { + $oTpl->set('s', 'OKBUTTON', ''); + $sClientForm = ''; + if (count($clients) == 0) { + $sClientForm = i18n('No clients available!'); + } + $oTpl->set('s', 'CLIENTFORM', $sClientForm); + $oTpl->set('s', 'CLIENTFORMCLOSE', ''); + + foreach ($clients as $key => $v_client) { + if ($perm->hasClientPermission($key)) { + $cApiClient->loadByPrimaryKey($key); + if ($cApiClient->hasLanguages()) { + $name = $v_client['name'] . " (" . $key . ')'; + } else { + $warnings[] = sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); + } + } + } + + if ($perm->have_perm() && count($warnings) > 0) { + $oTpl->set('s', 'WARNINGS', "
" . $notification->messageBox("warning", implode("
", $warnings), 0)); + } else { + $oTpl->set('s', 'WARNINGS', ''); + } + + $oTpl->set('s', 'CLIENTSDROPDOWN', $name); } -$props= new PropertyCollection; +$props = new PropertyCollection; $props->select("itemtype = 'idcommunication' AND idclient='$client' AND type = 'todo' AND name = 'status' AND value != 'done'"); -$todoitems= array (); +$aItemsTodo = []; -while ($prop= $props->next()) { - $todoitems[]= $prop->get("itemid"); +while ($prop = $props->next()) { + $aItemsTodo[] = $prop->get("itemid"); } -if (count($todoitems) > 0) { - $in= "idcommunication IN (" . implode(",", $todoitems) . ")"; +if (count($aItemsTodo) > 0) { + $in = "idcommunication IN (" . implode(",", $aItemsTodo) . ")"; } else { - $in= 1; + $in = 1; } -$todoitems= new TODOCollection; -$recipient= $auth->auth["uid"]; +$todoitems = new TODOCollection(); +$recipient = $auth->auth["uid"]; $todoitems->select("recipient = '$recipient' AND idclient='$client' AND $in"); -while ($todo= $todoitems->next()) { - if ($todo->getProperty("todo", "status") != "done") { - $todoitems++; - } +$iItemsTodoOpen = 0; +while ($todo = $todoitems->next()) { + if ($todo->getProperty("todo", "status") != "done") { + $iItemsTodoOpen++; + } } $sTaskTranslation = ''; -if ($todoitems->count() == 1) { - $sTaskTranslation = i18n("Reminder list: %d Task open"); +if ($iItemsTodoOpen == 1) { + $sTaskTranslation = i18n("Reminder list: %d Task open"); } else { - $sTaskTranslation = i18n("Reminder list: %d Tasks open"); + $sTaskTranslation = i18n("Reminder list: %d Tasks open"); } -$mycontenido_overview= '' . i18n("Overview") . ''; -$mycontenido_lastarticles= '' . i18n("Recently edited articles") . ''; -$mycontenido_tasks= '' . sprintf($sTaskTranslation, $todoitems->count()) . ''; -$mycontenido_settings= '' . i18n("Settings") . ''; +$mycontenido_overview = '' . i18n("Overview") . ''; +$mycontenido_lastarticles = '' . i18n("Recently edited articles") . ''; +$mycontenido_tasks = '' . sprintf($sTaskTranslation, $iItemsTodoOpen) . ''; +$mycontenido_settings = '' . i18n("Settings") . ''; $oTpl->set('s', 'MYCONTENIDO_OVERVIEW', $mycontenido_overview); $oTpl->set('s', 'MYCONTENIDO_LASTARTICLES', $mycontenido_lastarticles); $oTpl->set('s', 'MYCONTENIDO_TASKS', $mycontenido_tasks); $oTpl->set('s', 'MYCONTENIDO_SETTINGS', $mycontenido_settings); -$admins= $classuser->getSystemAdmins(true); +$admins = $classuser->getSystemAdmins(true); $sAdminTemplate = '
  • %s, %s
  • '; -$sAdminName= ""; +$sAdminName = ""; $sAdminEmail = ""; $sOutputAdmin = ""; - foreach ($admins as $key => $value) { - if ($value["email"] != "") { - $sAdminEmail= '' . $value["email"] . ''; - $sAdminName= $value['realname']; - $sOutputAdmin .= sprintf($sAdminTemplate, $sAdminName, $sAdminEmail); - } + if ($value["email"] != "") { + $sAdminEmail = '' . $value["email"] . ''; + $sAdminName = $value['realname']; + $sOutputAdmin .= sprintf($sAdminTemplate, $sAdminName, $sAdminEmail); + } } $oTpl->set('s', 'ADMIN_EMAIL', $sOutputAdmin); @@ -238,14 +235,14 @@ $oTpl->set('s', 'ADMIN_EMAIL', $sOutputAdmin); $oTpl->set('s', 'SYMBOLHELP', '' . i18n("Symbol help") . ''); if (isset($cfg["contenido"]["handbook_path"]) && file_exists($cfg["contenido"]["handbook_path"])) { - $oTpl->set('s', 'CONTENIDOMANUAL', '' . i18n("Contenido Manual") . ''); + $oTpl->set('s', 'CONTENIDOMANUAL', '' . i18n("Contenido Manual") . ''); } else { - $oTpl->set('s', 'CONTENIDOMANUAL', ''); + $oTpl->set('s', 'CONTENIDOMANUAL', ''); } // For display current online user in Contenido-Backend -$aMemberList= array (); -$oActiveUsers= new ActiveUsers($db, $cfg, $auth); +$aMemberList = array(); +$oActiveUsers = new ActiveUsers($db, $cfg, $auth); $iNumberOfUsers = 0; // Start() @@ -255,17 +252,17 @@ $oActiveUsers->startUsersTracking(); $iNumberOfUsers = $oActiveUsers->getNumberOfUsers(); // Find all User who is online -$aMemberList= $oActiveUsers->findAllUser(); +$aMemberList = $oActiveUsers->findAllUser(); // Template for display current user $sTemplate = ""; -$sOutput = ""; -$sTemplate= '
  • %s, %s
  • '; +$sOutput = ""; +$sTemplate = '
  • %s, %s
  • '; foreach ($aMemberList as $key) { - $sRealName= $key['realname']; - $aPerms['0']= $key['perms']; - $sOutput .= sprintf($sTemplate, $sRealName, $aPerms['0']); + $sRealName = $key['realname']; + $aPerms['0'] = $key['perms']; + $sOutput .= sprintf($sTemplate, $sRealName, $aPerms['0']); } // set template welcome @@ -273,12 +270,11 @@ $oTpl->set('s', 'USER_ONLINE', $sOutput); $oTpl->set('s', 'Anzahl', $iNumberOfUsers); // rss feed -if($perm->isSysadmin($vuser) && isset($cfg["backend"]["newsfeed"]) && $cfg["backend"]["newsfeed"] == true){ - $newsfeed = 'some news'; - $oTpl->set('s', 'CONTENIDO_NEWS', $newsfeed); -} -else{ - $oTpl->set('s', 'CONTENIDO_NEWS', ''); +if ($perm->isSysadmin($vuser) && isset($cfg["backend"]["newsfeed"]) && $cfg["backend"]["newsfeed"] == true) { + $newsfeed = 'some news'; + $oTpl->set('s', 'CONTENIDO_NEWS', $newsfeed); +} else { + $oTpl->set('s', 'CONTENIDO_NEWS', ''); } // check for new updates @@ -287,5 +283,4 @@ $sUpdateNotifierOutput = $oUpdateNotifier->displayOutput(); $oTpl->set('s', 'UPDATENOTIFICATION', $sUpdateNotifierOutput); $oTpl->generate($cfg["path"]["templates"] . $cfg["templates"]["welcome"]); - ?> \ No newline at end of file diff --git a/conlite/includes/startup.php b/conlite/includes/startup.php index 323a941..9a51ad9 100644 --- a/conlite/includes/startup.php +++ b/conlite/includes/startup.php @@ -228,4 +228,4 @@ if($cfg['debug']['sendnocacheheader']) { header("Pragma: no-cache"); // HTTP 1.0. header("Expires: 0"); // Proxies. } -?> \ No newline at end of file +?> diff --git a/conlite/scripts/contextMenu.remove.js b/conlite/scripts/contextMenu.remove.js deleted file mode 100644 index 10e1cd5..0000000 --- a/conlite/scripts/contextMenu.remove.js +++ /dev/null @@ -1,106 +0,0 @@ -var display_url; - function createMenu (menuname, items, links) - { - document.writeln(''); - document.getElementById(menuname).style.display = ''; - } - -var ie5 = document.all && document.getElementById - var ns6 = document.getElementById && !document.all - if (ie5 || ns6) -//var menuobj=document.getElementById("ie5menu") - - function showmenuie5(e){ - - if (ie5) - { - menuobj = document.getElementById(window.event.srcElement.getAttribute("helpid")); - } else - { - menuobj = document.getElementById(e.target.getAttribute("helpid")); - } - - -//Find out how close the mouse is to the corner of the window - var rightedge = ie5? document.body.clientWidth - event.clientX : window.innerWidth - e.clientX - var bottomedge = ie5? document.body.clientHeight - event.clientY : window.innerHeight - e.clientY - -//if the horizontal distance isn't enough to accomodate the width of the context menu - if (rightedge < menuobj.offsetWidth) -//move the horizontal position of the menu to the left by it's width - menuobj.style.left = ie5? document.body.scrollLeft + event.clientX - menuobj.offsetWidth : window.pageXOffset + e.clientX - menuobj.offsetWidth - else -//position the horizontal position of the menu where the mouse was clicked - menuobj.style.left = ie5? document.body.scrollLeft + event.clientX : window.pageXOffset + e.clientX - -//same concept with the vertical position - if (bottomedge < menuobj.offsetHeight) - menuobj.style.top = ie5? document.body.scrollTop + event.clientY - menuobj.offsetHeight : window.pageYOffset + e.clientY - menuobj.offsetHeight - else - menuobj.style.top = ie5? document.body.scrollTop + event.clientY : window.pageYOffset + e.clientY - - menuobj.style.visibility = "visible" - - - return false; - - } - -function hidemenuie5(e){ -if (typeof menuobj == "object") -{ -menuobj.style.visibility = "hidden" -} -} - -function highlightie5(e){ -var firingobj = ie5? event.srcElement : e.target - if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ -if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode //up one node - firingobj.style.backgroundColor = "#F4F8BD" - firingobj.style.color = "black" - firingobj.style.cursor = "pointer" - if (display_url == 1) - window.status = event.srcElement.url -} -} - -function lowlightie5(e){ -var firingobj = ie5? event.srcElement : e.target - if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ -if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode //up one node - firingobj.style.backgroundColor = "" - firingobj.style.color = "black" - window.status = '' -} -} - -function jumptoie5(e){ -var firingobj = ie5? event.srcElement : e.target - if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ -if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode - if (firingobj.getAttribute("target")) - window.open(firingobj.getAttribute("url"), firingobj.getAttribute("target")) - else - window.location = firingobj.getAttribute("url") -} -} - -var menuobj; - if (ie5 || ns6){ -//menuobj.style.display='' -document.oncontextmenu = showmenuie5 - document.onclick = hidemenuie5 -} \ No newline at end of file diff --git a/conlite/templates/standard/template.con_edit_form.html b/conlite/templates/standard/template.con_edit_form.html index 6659d98..0076951 100644 --- a/conlite/templates/standard/template.con_edit_form.html +++ b/conlite/templates/standard/template.con_edit_form.html @@ -1,227 +1,229 @@ - - - - - - - - - - - - - - - + + + + + + - - + } + + + -
    {CATEGORY}
    +
    {CATEGORY}
    -
    + - - {HIDDENSESSION} - {HIDDENFIELDS} - - - - - - + + {HIDDENSESSION} + {HIDDENFIELDS} + + + + - {NOTIFICATION} +
    - - - - - - - - - - - + {NOTIFICATION} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - -
    {TITEL}{TITEL-FIELD}
    {URLNAME}{URLNAME-FIELD}
    {DIRECTLINKTEXT}{DIRECTLINK}
    {ARTIKELART}{ARTIKELARTSELECT}
    {ARTIKELID}{ARTID}{ZUORDNUNGSID}{ALLOCID}
    {ERSTELLT}{ERSTELLUNGS-DATUM}{AUTHOR_CREATOR}{AUTOR-ERSTELLUNGS-NAME}
    {LETZTE-AENDERUNG}{AENDERUNGS-DATUM}{AUTHOR_MODIFIER}{AUTOR-AENDERUNG-NAME}
    {PUBLISHING_DATE_LABEL}{PUBLISHING_DATE}{PUBLISHER}{PUBLISHER_NAME}
    {WEITERLEITUNG} - - - - - + + + -
    {CHECKBOX}{URL}{CHECKBOX-NEWWINDOW}
    {TITEL}{TITEL-FIELD}
    -
    i18n("Time control") - - - - - - - - - - -
     i18n("Start date"): - {CHOOSESTART}
     i18n("End date"): - {CHOOSEEND}
    {MOVETOCATEGORYSELECT}
    -
    {ONLINE}{ONLINE-CHECKBOX}{STARTARTIKEL}{STARTARTIKEL-CHECKBOX}
    {SORTIERUNG}{SORTIERUNG-FIELD}
    {URLNAME}{URLNAME-FIELD}
    {STRUKTUR}{STRUKTUR-FIELD}
    {DIRECTLINKTEXT}{DIRECTLINK}
    {SUMMARY}{SUMMARY-INPUT}
    i18n("Page title"){TITLE-INPUT}
    i18n("Meta tags") 
    {METATITLE}{METAFIELDTYPE}
    {ARTIKELART}{ARTIKELARTSELECT}
      
    + + {ARTIKELID} + {ARTID} + {ZUORDNUNGSID} + {ALLOCID} + -
    - - + + {PUBLISHING_DATE_LABEL} + {PUBLISHING_DATE} + {PUBLISHER} + {PUBLISHER_NAME} + + + + {WEITERLEITUNG} + + + + + + + +
    {CHECKBOX}{URL}{CHECKBOX-NEWWINDOW}
    + + + + + i18n("Time control") + + + + + + + + + + + + +
     i18n("Start date"): + {CHOOSESTART}
     i18n("End date"): + {CHOOSEEND}
    {MOVETOCATEGORYSELECT}
    + + + {ONLINE} + {ONLINE-CHECKBOX} + {STARTARTIKEL} + {STARTARTIKEL-CHECKBOX} + + + + {SORTIERUNG} + {SORTIERUNG-FIELD} + + + + + {STRUKTUR} + {STRUKTUR-FIELD} + + + + + {SUMMARY} + {SUMMARY-INPUT} + + + + + i18n("Page title") + {TITLE-INPUT} + + + + + i18n("Meta tags") +   + + + + + {METATITLE} + {METAFIELDTYPE} + + + + +   +   + + + + + + + + + + diff --git a/conlite/templates/standard/template.info.html b/conlite/templates/standard/template.info.html index d784eba..de3b066 100644 --- a/conlite/templates/standard/template.info.html +++ b/conlite/templates/standard/template.info.html @@ -18,10 +18,10 @@
    Current version:
    - Carsten Peters, Markus Hübner, Ortwin Pinke, René Mansveld, Steffen Reddig, Thomas Dubbert + Carsten Peters, Markus Hübner, Ortwin Pinke, Lars Lämmerhirt

    Special thanks to all contributors of the former releases and bugreporters.
    - - + René Mansveld, Steffen Reddig, Thomas Dubbert

    Special thanks to all contributors of Contenido up to 4.8.15, which ConLite is based upon.
    Andreas Kummer, Andreas Lindner, Bilal Arslan, Björn Behrens, Christa Tabara, Christian End, Conrad Leu, Dominik Ziegler, Frederic Schneider, Harald Wirths, Holger Librenz, Ingo van Peeren, Jonas Vogel, Kristina Birkenbeul, Marco Prey, Martin Horwath, Murat Purç, Oliver Lohkemper, Rudi Bieller, Timo Trautmann, Thorsten Granz, Thomas Schäfer-Tertilt, Tobias Klonk, Daniel Rothmaler, Guido, i-fekt, Helen Schäfer, Jan Lengowski, John van Aerle, Maria Martha Sanchez-Straub, Marco Jahn, Martin Hahn, Marion Fischer, Olaf Niemann, Robert Herbert, Stefan Jelner, Timo A. Hummel, Willi Man diff --git a/nbproject/project.properties b/nbproject/project.properties index 43d66d2..efdf308 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,6 +1,6 @@ auxiliary.org-netbeans-modules-php-smarty.smarty-framework=true include.path=${php.global.include.path} -php.version=PHP_80 +php.version=PHP_81 source.encoding=UTF-8 src.dir=. tags.asp=false diff --git a/nbproject/project.xml b/nbproject/project.xml index 0edc2ce..c7e626f 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -3,7 +3,7 @@ org.netbeans.modules.php.project - ConLite213 + cl_stage diff --git a/setup/data/base/base_files1.sql b/setup/data/base/base_files1.sql index 821c511..ca4e58c 100644 --- a/setup/data/base/base_files1.sql +++ b/setup/data/base/base_files1.sql @@ -180,7 +180,7 @@ INSERT INTO !PREFIX!_files VALUES('402', '402', 'include.js_history.php', 'main' INSERT INTO !PREFIX!_files VALUES('403', '403', 'include.html_tpl_history.php', 'main'); INSERT INTO !PREFIX!_files VALUES('415', '415', 'include.system_configuration.php', 'main'); INSERT INTO !PREFIX!_files VALUES('503', '52', 'include.subnav.php', 'main'); -INSERT INTO !PREFIX!_files VALUES('700', '52', 'include.subnav_blank.php', 'main'); +INSERT INTO !PREFIX!_files VALUES('700', '52', 'include.subnav.php', 'main'); INSERT INTO !PREFIX!_files VALUES('813', '811', 'include.system_purge.php', 'main'); INSERT INTO !PREFIX!_files VALUES('814', '812', 'include.system_db_backup.php', 'main'); INSERT INTO !PREFIX!_files VALUES('990', '990', 'pluginmanager/includes/include.right_bottom.php', 'main'); \ No newline at end of file diff --git a/setup/data/base/base_type1.sql b/setup/data/base/base_type1.sql index 192cec8..dd00331 100644 --- a/setup/data/base/base_type1.sql +++ b/setup/data/base/base_type1.sql @@ -1,23 +1,23 @@ DELETE FROM !PREFIX!_type WHERE idtype < 10000; -INSERT INTO !PREFIX!_type VALUES('22', 'CMS_QRCODE', '/**\r\n * CMS_QRCODE\r\n */ \r\n$tmp = $a_content[''CMS_QRCODE''][$val];\r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''", "''", $tmp); \r\n$tmp = str_replace("\\$", ''\\\\\\$'', $tmp); \r\n\r\n$q = array("", "L", "M", "Q", "H");\r\n$quality = intval(getEffectiveSetting("qrcode", "quality"));\r\nif ($quality == 0) {\r\n setSystemProperty("qrcode", "quality", 1);\r\n setSystemProperty("qrcode", "blocksize", 3);\r\n setSystemProperty("qrcode", "border", 2);\r\n $quality = 1;\r\n}\r\n$quality = $q[$quality];\r\n$blocksize = intval(getEffectiveSetting("qrcode", "blocksize", 3));\r\n$border = intval(getEffectiveSetting("qrcode", "border", 2));\r\n\r\nif ($edit) {\r\n # In editor we always generate a new image because of possible changes\r\n $tmp2 = "\r\necho ''QR Code
    (online only)
    '';\r\n@unlink(''" . $cfgClient[$client]["path"]["frontend"] . "cache/QR-Code-" . $idart . "-" . $val . ".png'');";\r\n \r\n # Edit anchor and image\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_QRCODE&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_QRCODE_'' . $val . ''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'', ''" . $editLink . "'');");\r\n # Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"] . $cfg["path"]["images"] . "but_edittext.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n # Process for tmp2put with echo\r\n $finalEditButton = $editAnchor->render();\r\n \r\n $tmp2 .= "echo ''" . $finalEditButton . "'';";\r\n} else {\r\n # In frontend and preview we only generate a new image if it was deleted\r\n $tmp2 = "\r\nif (!is_file(''" . $cfgClient[$client][''path''][''frontend''] . "cache/QR-Code-" . $idart . "-" . $val . ".png'')) {\r\n define(''QR_CACHE_DIR'', ''" . $cfgClient[$client][''path''][''frontend''] . "cache/phpqrcode/'');\r\n if (!is_dir(QR_CACHE_DIR)) {\r\n mkdir(QR_CACHE_DIR);\r\n }";\r\n if (isStartArticle($idartlang, $idcat, $lang)) {\r\n $tmp2 .= "\r\n QRcode::png(''" . ((strlen($tmp)) ? $tmp : Contenido_Url::getInstance()->build(array(''idcat'' => $idcat, ''client'' => $client, ''lang'' => $lang), true)) . "'', ''" . $cfgClient[$client][''path''][''frontend''] . ''cache/QR-Code-'' . $idart . ''-'' . $val . ''.png'' . "'', ''" . $quality . "'', " . $blocksize . ", " . $border . ");";\r\n } else {\r\n $tmp2 .= "\r\n QRcode::png(''" . ((strlen($tmp)) ? $tmp : Contenido_Url::getInstance()->build(array(''idcat'' => $idcat, ''idart'' => $idart, ''client'' => $client, ''lang'' => $lang), true)) . "'', ''" . $cfgClient[$client][''path''][''frontend''] . ''cache/QR-Code-'' . $idart . ''-'' . $val . ''.png'' . "'', ''" . $quality . "'', " . $blocksize . ", " . $border . ");";\r\n }\r\n $tmp2 .= "\r\n}\r\necho ''\\"QR
    '';";\r\n}\r\n$tmp = $tmp2;', 'QR Code', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('18', 'CMS_EASYIMGEDIT', '/**\r\n * CMS_EASYIMGEDIT\r\n */\r\n$tmp = "";\r\nif ($edit) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_EASYIMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_EASYIMGEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', '', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('19', 'CMS_DATE', '$tmp = $a_content["CMS_DATE"][$val];\r\n\r\n$oCmsDate = new Cms_Date($tmp, $val, $idartlang, $editLink, $cfg, $db, count($a_content["CMS_DATE"]), $belang);\r\n\r\nif($edit){\r\n\r\n$tmp = $oCmsDate->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsDate->getAllWidgetView();\r\n\r\n}', 'Date', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('20', 'CMS_TEASER', '$tmp = $a_content["CMS_TEASER"][$val];\r\n\r\n$oCmsTeaser = new Cms_Teaser($tmp, $val, $idartlang, $editLink, $cfg, $db, $belang, $client, $lang, $cfgClient, $sess);\r\n\r\nif($edit){\r\n\r\n$tmp = $oCmsTeaser->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsTeaser->getAllWidgetView();\r\n\r\n}', 'Teaser', '0', '', '2009-04-20 13:12:14', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('21', 'CMS_FILELIST', '$tmp = $a_content["CMS_FILELIST"][$val];\r\n\r\n$oCmsFileList = new Cms_FileList($tmp, $val, $idartlang, $editLink, $cfg, $db, $belang, $client, $lang, $cfgClient, $sess);\r\n\r\nif($edit){\r\n\r\n$tmp = $oCmsFileList->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsFileList->getAllWidgetView();\r\n\r\n}', '', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('17', 'CMS_HTMLTEXT', '/**\r\n * CMS_HTMLTEXT\r\n */\r\ncInclude("includes", "functions.lang.php");\r\n\r\n$content = $a_content[''CMS_HTMLTEXT''][$val];\r\n$content = urldecode($content);\r\n$content = htmldecode($content);\r\n$content = strip_tags($content);\r\n\r\n$content = str_replace(" ", " ", $content);\r\n\r\n$content = htmlspecialchars($content);\r\nif ($content == "")\r\n{\r\n $content = " ";\r\n}\r\n\r\n$content = nl2br($content);\r\n\r\nif ($edit) {\r\n\r\n $div = new cHTMLDiv;\r\n $div->setID("HTMLTEXT_".$db->f("idtype")."_".$val);\r\n $div->setEvent("focus", "this.style.border=''1px solid #bb5577''");\r\n $div->setEvent("blur", "this.style.border=''1px dashed #bfbfbf''");\r\n $div->setStyleDefinition("border", "1px dashed #bfbfbf");\r\n $div->updateAttributes(array("contentEditable" => "true"));\r\n $div->setStyleDefinition("direction", langGetTextDirection($lang));\r\n \r\n $editlink = new cHTMLLink;\r\n $editlink->setClass(''CMS_HTMLTEXT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editlink->setLink($sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTMLTEXT&typenr=$val&lang=$lang"));\r\n \r\n $editimg = new cHTMLImage;\r\n $editimg->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edittext.gif");\r\n \r\n $savelink = new cHTMLLink;\r\n $savelink->setClass(''CMS_HTMLTEXT_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $savelink->setLink("javascript:setcontent(''$idartlang'',''0'')");\r\n \r\n $saveimg = new cHTMLImage;\r\n $saveimg->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif");\r\n \r\n $savelink->setContent($saveimg);\r\n \r\n $editlink->setContent($editimg);\r\n \r\n $div->setContent($content);\r\n\r\n $tmp = implode("", array($div->render(), $editlink->render(), " ", $savelink->render()));\r\n $tmp = str_replace(''"'', ''\\"'', $tmp);\r\n} else {\r\n $tmp = $content;\r\n $tmp = str_replace(''"'', ''\\"'', $tmp);\r\n}\r\n\r\n\r\n$tmp = addslashes($tmp);\r\n$tmp = str_replace(''$'', ''\\\\\\$'', $tmp);', 'Text / Standard', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('16', 'CMS_SIMPLELINKEDIT', '/**\r\n * CMS_LINKEDIT\r\n */\r\n$tmp = "";\r\nif ($edit) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_SIMPLELINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_SIMPLELINKEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', '', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('14', 'CMS_IMGEDIT', '/**\r\n * CMS_IMGEDIT\r\n */\r\n$tmp = '''';\r\n\r\nif ($edit) {\r\n \r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_IMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_IMGEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Edit button for an image', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:58:44'); +INSERT INTO !PREFIX!_type VALUES('22', 'CMS_QRCODE', '/**\r\n * CMS_QRCODE\r\n */ \r\n$tmp = $a_content[''CMS_QRCODE''][$val];\r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''", "''", $tmp); \r\n$tmp = str_replace("\\$", ''\\\\\\$'', $tmp); \r\n\r\n$q = array("", "L", "M", "Q", "H");\r\n$quality = intval(getEffectiveSetting("qrcode", "quality"));\r\nif ($quality == 0) {\r\n setSystemProperty("qrcode", "quality", 1);\r\n setSystemProperty("qrcode", "blocksize", 3);\r\n setSystemProperty("qrcode", "border", 2);\r\n $quality = 1;\r\n}\r\n$quality = $q[$quality];\r\n$blocksize = intval(getEffectiveSetting("qrcode", "blocksize", 3));\r\n$border = intval(getEffectiveSetting("qrcode", "border", 2));\r\n\r\nif (!empty($edit)) {\r\n # In editor we always generate a new image because of possible changes\r\n $tmp2 = "\r\necho ''QR Code
    (online only)
    '';\r\n@unlink(''" . $cfgClient[$client]["path"]["frontend"] . "cache/QR-Code-" . $idart . "-" . $val . ".png'');";\r\n \r\n # Edit anchor and image\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_QRCODE&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_QRCODE_'' . $val . ''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'', ''" . $editLink . "'');");\r\n # Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"] . $cfg["path"]["images"] . "but_edittext.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n # Process for tmp2put with echo\r\n $finalEditButton = $editAnchor->render();\r\n \r\n $tmp2 .= "echo ''" . $finalEditButton . "'';";\r\n} else {\r\n # In frontend and preview we only generate a new image if it was deleted\r\n $tmp2 = "\r\nif (!is_file(''" . $cfgClient[$client][''path''][''frontend''] . "cache/QR-Code-" . $idart . "-" . $val . ".png'')) {\r\n define(''QR_CACHE_DIR'', ''" . $cfgClient[$client][''path''][''frontend''] . "cache/phpqrcode/'');\r\n if (!is_dir(QR_CACHE_DIR)) {\r\n mkdir(QR_CACHE_DIR);\r\n }";\r\n if (isStartArticle($idartlang, $idcat, $lang)) {\r\n $tmp2 .= "\r\n QRcode::png(''" . ((strlen($tmp)) ? $tmp : Contenido_Url::getInstance()->build(array(''idcat'' => $idcat, ''client'' => $client, ''lang'' => $lang), true)) . "'', ''" . $cfgClient[$client][''path''][''frontend''] . ''cache/QR-Code-'' . $idart . ''-'' . $val . ''.png'' . "'', ''" . $quality . "'', " . $blocksize . ", " . $border . ");";\r\n } else {\r\n $tmp2 .= "\r\n QRcode::png(''" . ((strlen($tmp)) ? $tmp : Contenido_Url::getInstance()->build(array(''idcat'' => $idcat, ''idart'' => $idart, ''client'' => $client, ''lang'' => $lang), true)) . "'', ''" . $cfgClient[$client][''path''][''frontend''] . ''cache/QR-Code-'' . $idart . ''-'' . $val . ''.png'' . "'', ''" . $quality . "'', " . $blocksize . ", " . $border . ");";\r\n }\r\n $tmp2 .= "\r\n}\r\necho ''\\"QR
    '';";\r\n}\r\n$tmp = $tmp2;', 'QR Code', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); +INSERT INTO !PREFIX!_type VALUES('18', 'CMS_EASYIMGEDIT', '/**\r\n * CMS_EASYIMGEDIT\r\n */\r\n$tmp = "";\r\nif (!empty($edit)) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_EASYIMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_EASYIMGEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', '', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('19', 'CMS_DATE', '$tmp = $a_content["CMS_DATE"][$val];\r\n\r\n$oCmsDate = new Cms_Date($tmp, $val, $idartlang, $editLink, $cfg, $db, count($a_content["CMS_DATE"]), $belang);\r\n\r\nif(!empty($edit)){\r\n\r\n$tmp = $oCmsDate->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsDate->getAllWidgetView();\r\n\r\n}', 'Date', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); +INSERT INTO !PREFIX!_type VALUES('20', 'CMS_TEASER', '$tmp = $a_content["CMS_TEASER"][$val];\r\n\r\n$oCmsTeaser = new Cms_Teaser($tmp, $val, $idartlang, $editLink, $cfg, $db, $belang, $client, $lang, $cfgClient, $sess);\r\n\r\nif(!empty($edit)){\r\n\r\n$tmp = $oCmsTeaser->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsTeaser->getAllWidgetView();\r\n\r\n}', 'Teaser', '0', '', '2009-04-20 13:12:14', '0000-00-00 00:00:00'); +INSERT INTO !PREFIX!_type VALUES('21', 'CMS_FILELIST', '$tmp = $a_content["CMS_FILELIST"][$val];\r\n\r\n$oCmsFileList = new Cms_FileList($tmp, $val, $idartlang, $editLink, $cfg, $db, $belang, $client, $lang, $cfgClient, $sess);\r\n\r\nif(!empty($edit)){\r\n\r\n$tmp = $oCmsFileList->getAllWidgetEdit();\r\n\r\n}else{\r\n\r\n$tmp = $oCmsFileList->getAllWidgetView();\r\n\r\n}', '', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); +INSERT INTO !PREFIX!_type VALUES('17', 'CMS_HTMLTEXT', '/**\r\n * CMS_HTMLTEXT\r\n */\r\ncInclude("includes", "functions.lang.php");\r\n\r\n$content = $a_content[''CMS_HTMLTEXT''][$val];\r\n$content = urldecode($content);\r\n$content = htmldecode($content);\r\n$content = strip_tags($content);\r\n\r\n$content = str_replace(" ", " ", $content);\r\n\r\n$content = htmlspecialchars($content);\r\nif ($content == "")\r\n{\r\n $content = " ";\r\n}\r\n\r\n$content = nl2br($content);\r\n\r\nif (!empty($edit)) {\r\n\r\n $div = new cHTMLDiv;\r\n $div->setID("HTMLTEXT_".$db->f("idtype")."_".$val);\r\n $div->setEvent("focus", "this.style.border=''1px solid #bb5577''");\r\n $div->setEvent("blur", "this.style.border=''1px dashed #bfbfbf''");\r\n $div->setStyleDefinition("border", "1px dashed #bfbfbf");\r\n $div->updateAttributes(array("contentEditable" => "true"));\r\n $div->setStyleDefinition("direction", langGetTextDirection($lang));\r\n \r\n $editlink = new cHTMLLink;\r\n $editlink->setClass(''CMS_HTMLTEXT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editlink->setLink($sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTMLTEXT&typenr=$val&lang=$lang"));\r\n \r\n $editimg = new cHTMLImage;\r\n $editimg->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edittext.gif");\r\n \r\n $savelink = new cHTMLLink;\r\n $savelink->setClass(''CMS_HTMLTEXT_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $savelink->setLink("javascript:setcontent(''$idartlang'',''0'')");\r\n \r\n $saveimg = new cHTMLImage;\r\n $saveimg->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif");\r\n \r\n $savelink->setContent($saveimg);\r\n \r\n $editlink->setContent($editimg);\r\n \r\n $div->setContent($content);\r\n\r\n $tmp = implode("", array($div->render(), $editlink->render(), " ", $savelink->render()));\r\n $tmp = str_replace(''"'', ''\\"'', $tmp);\r\n} else {\r\n $tmp = $content;\r\n $tmp = str_replace(''"'', ''\\"'', $tmp);\r\n}\r\n\r\n\r\n$tmp = addslashes($tmp);\r\n$tmp = str_replace(''$'', ''\\\\\\$'', $tmp);', 'Text / Standard', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('16', 'CMS_SIMPLELINKEDIT', '/**\r\n * CMS_LINKEDIT\r\n */\r\n$tmp = "";\r\nif (!empty($edit)) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_SIMPLELINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_SIMPLELINKEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', '', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('14', 'CMS_IMGEDIT', '/**\r\n * CMS_IMGEDIT\r\n */\r\n$tmp = '''';\r\n\r\nif (!empty($edit)) {\r\n \r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_IMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_IMGEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Edit button for an image', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:58:44'); INSERT INTO !PREFIX!_type VALUES('15', 'CMS_IMGTITLE', '/**\r\n * CMS_IMGTITLE\r\n */\r\n$tmp = $a_content["CMS_IMGDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = addslashes($tmp);', 'Title of an image', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('13', 'CMS_RAWLINK', '/**\r\n* CMS_RAWLINK\r\n*/\r\nglobal $cfgClient;\r\nglobal $client;\r\n\r\n$tmp = urldecode($a_content["CMS_LINK"][$val]);\r\n\r\n/* internal link */\r\nif ( is_numeric($tmp) ) {\r\n $tmp = "front_content.php?idcatart=". $tmp."&client=".$client."&lang=".$lang;\r\n if ($edit) $tmp = $sess->url("$tmp");\r\n\r\n}', 'Raw Link without transformation', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); +INSERT INTO !PREFIX!_type VALUES('13', 'CMS_RAWLINK', '/**\r\n* CMS_RAWLINK\r\n*/\r\nglobal $cfgClient;\r\nglobal $client;\r\n\r\n$tmp = urldecode($a_content["CMS_LINK"][$val]);\r\n\r\n/* internal link */\r\nif ( is_numeric($tmp) ) {\r\n $tmp = "front_content.php?idcatart=". $tmp."&client=".$client."&lang=".$lang;\r\n if (!empty($edit)) $tmp = $sess->url("$tmp");\r\n\r\n}', 'Raw Link without transformation', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); INSERT INTO !PREFIX!_type VALUES('11', 'CMS_LINKTITLE', '/**\r\n * CMS_LINKTITLE\r\n */\r\n$tmp = $a_content["CMS_LINKDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = addslashes($tmp);\r\n\r\n', 'Title of a Link', '0', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'); -INSERT INTO !PREFIX!_type VALUES('12', 'CMS_LINKEDIT', '/**\r\n * CMS_LINKEDIT\r\n */\r\n$tmp = "";\r\n\r\nif ($edit) {\r\n \r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_LINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_LINKEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $finalEditButton;\r\n \r\n}', 'Link edit button', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('9', 'CMS_HEAD', '/**\r\n * CMS_HEAD\r\n */\r\n$tmp = $a_content["CMS_HEAD"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\nif ($edit) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HEAD&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_HEAD_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithead.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Headline / Standard', '0', '', '2002-05-13 19:02:34', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('10', 'CMS_SWF', '/**\r\n * CMS_SWF\r\n */\r\n\r\nif ( !is_object($db2) ) $db2 = new DB_Contenido;\r\n\r\n$tmp_id = $a_content[''CMS_SWF''][$val];\r\n\r\n$sql = "SELECT * FROM ".$cfg["tab"]["upl"]." WHERE idclient=''".$client."'' AND idupl=''".$tmp_id."'' AND filetype = ''swf''";\r\n\r\n$db2->query($sql);\r\n\r\nif ( $db2->next_record() ) {\r\n\r\n $tmp_swf = $cfgClient[$client]["upload"] . $db2->f("dirname") . $db2->f("filename");\r\n \r\n $aImgSize = @getimagesize($tmp_swf);\r\n\r\n $width = $aImgSize[0];\r\n $height = $aImgSize[1];\r\n\r\n $tmp = ''\r\n \r\n \r\n '';\r\n} else {\r\n $tmp = '''';\r\n}\r\n\r\n\r\nif( $edit ) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_SWF&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_SWF_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editswf.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n \r\n $tmp = ''
    ''.$tmp.''
    ''.$finalEditButton.''
    '';\r\n}\r\n\r\n$tmp = addslashes( addslashes($tmp) ); \r\n$tmp = str_replace( "\\\\\\''", "''", $tmp ); ', 'Flash Movie', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('12', 'CMS_LINKEDIT', '/**\r\n * CMS_LINKEDIT\r\n */\r\n$tmp = "";\r\n\r\nif (!empty($edit)) {\r\n \r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_LINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_LINKEDIT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $finalEditButton;\r\n \r\n}', 'Link edit button', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('9', 'CMS_HEAD', '/**\r\n * CMS_HEAD\r\n */\r\n$tmp = $a_content["CMS_HEAD"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\nif (!empty($edit)) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HEAD&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_HEAD_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithead.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Headline / Standard', '0', '', '2002-05-13 19:02:34', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('10', 'CMS_SWF', '/**\r\n * CMS_SWF\r\n */\r\n\r\nif ( !is_object($db2) ) $db2 = new DB_Contenido;\r\n\r\n$tmp_id = $a_content[''CMS_SWF''][$val];\r\n\r\n$sql = "SELECT * FROM ".$cfg["tab"]["upl"]." WHERE idclient=''".$client."'' AND idupl=''".$tmp_id."'' AND filetype = ''swf''";\r\n\r\n$db2->query($sql);\r\n\r\nif ( $db2->next_record() ) {\r\n\r\n $tmp_swf = $cfgClient[$client]["upload"] . $db2->f("dirname") . $db2->f("filename");\r\n \r\n $aImgSize = @getimagesize($tmp_swf);\r\n\r\n $width = $aImgSize[0];\r\n $height = $aImgSize[1];\r\n\r\n $tmp = ''\r\n \r\n \r\n '';\r\n} else {\r\n $tmp = '''';\r\n}\r\n\r\n\r\nif( !empty($edit) ) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_SWF&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_SWF_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editswf.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n \r\n $tmp = ''
    ''.$tmp.''
    ''.$finalEditButton.''
    '';\r\n}\r\n\r\n$tmp = addslashes( addslashes($tmp) ); \r\n$tmp = str_replace( "\\\\\\''", "''", $tmp ); ', 'Flash Movie', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); INSERT INTO !PREFIX!_type VALUES('7', 'CMS_LINKTARGET', '/**\r\n * CMS_LINKTARGET\r\n */\r\n$tmp = $a_content["CMS_LINKTARGET"][$val];\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\n$tmp = urldecode($tmp);', 'Frame', '0', '', '2002-05-13 19:04:43', '2002-05-13 19:04:43'); -INSERT INTO !PREFIX!_type VALUES('8', 'CMS_LINKDESCR', '/**\r\n * CMS_LINKDESCR\r\n */\r\n$tmp = $a_content["CMS_LINKDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\nif ($edit) {\r\n\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_LINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_LINKDESCR_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Description', '0', '', '2002-05-13 19:05:00', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('6', 'CMS_LINK', '/**\r\n* CMS_LINK\r\n*/\r\n\r\n$tmp = urldecode($a_content["CMS_LINK"][$val]);\r\n\r\n/* internal link */\r\nif ( is_numeric($tmp) ) {\r\n $tmp = "front_content.php?idcatart=". $tmp."&client=".$client."&lang=".$lang;\r\n if ($edit) $tmp = $sess->url("$tmp");\r\n\r\n} else {\r\n\r\n if (!preg_match(''/^(http|https|ftp|telnet|gopher):\\/\\/((?:[a-zA-Z0-9_-]+\\.?)+):?(\\d*)/'', $tmp)) {\r\n // it''s a relative link, or an absolute link with unsupported protocol\r\n if (substr($tmp,0,4) == "www." || $tmp == "") { // only check if it could be a domainname\r\n $tmp = "http://".$tmp;\r\n }\r\n }\r\n\r\n}', 'Link', '0', '', '2002-05-13 19:04:36', '2002-05-13 19:04:36'); +INSERT INTO !PREFIX!_type VALUES('8', 'CMS_LINKDESCR', '/**\r\n * CMS_LINKDESCR\r\n */\r\n$tmp = $a_content["CMS_LINKDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\nif (!empty($edit)) {\r\n\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_LINK&typenr=$val");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_LINKDESCR_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editlink.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Description', '0', '', '2002-05-13 19:05:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('6', 'CMS_LINK', '/**\r\n* CMS_LINK\r\n*/\r\n\r\n$tmp = urldecode($a_content["CMS_LINK"][$val]);\r\n\r\n/* internal link */\r\nif ( is_numeric($tmp) ) {\r\n $tmp = "front_content.php?idcatart=". $tmp."&client=".$client."&lang=".$lang;\r\n if (!empty($edit)) $tmp = $sess->url("$tmp");\r\n\r\n} else {\r\n\r\n if (!preg_match(''/^(http|https|ftp|telnet|gopher):\\/\\/((?:[a-zA-Z0-9_-]+\\.?)+):?(\\d*)/'', $tmp)) {\r\n // it''s a relative link, or an absolute link with unsupported protocol\r\n if (substr($tmp,0,4) == "www." || $tmp == "") { // only check if it could be a domainname\r\n $tmp = "http://".$tmp;\r\n }\r\n }\r\n\r\n}', 'Link', '0', '', '2002-05-13 19:04:36', '2002-05-13 19:04:36'); INSERT INTO !PREFIX!_type VALUES('4', 'CMS_IMG', '/**\r\n * CMS_IMG\r\n */\r\n \r\n$tmp = $a_content["CMS_IMG"][$val];\r\n$tmp = urldecode($tmp);\r\nif($tmp==""||$tmp=="0"){\r\n$tmp="";\r\n\r\n}else{\r\n\r\nif (is_numeric($tmp))\r\n{\r\n$sql = "SELECT * FROM ".$cfg["tab"]["upl"]." WHERE idclient=''".$client."'' AND idupl=''".$tmp."''";\r\n\r\n$db2 = new DB_Contenido;\r\n$db2->query($sql);\r\n\r\nif ( $db2->next_record() ) {\r\n\r\n $tmp = $cfgClient[$client]["path"]["htmlpath"].$cfgClient[$client]["upload"].$db2->f("dirname").$db2->f("filename");\r\n }\r\n}\r\n\r\n $tmp = htmlspecialchars($tmp);\r\n$tmp = urldecode($tmp);\r\n $tmp = str_replace("''", "\\''", $tmp);\r\n}', 'Image', '0', '', '2002-05-13 19:04:21', '2002-05-13 19:04:21'); -INSERT INTO !PREFIX!_type VALUES('5', 'CMS_IMGDESCR', '/**\r\n * CMS_IMGDESCR\r\n */\r\n$tmp = $a_content["CMS_IMGDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlentities($tmp,ENT_QUOTES);\r\n\r\n\r\nif ($edit) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_IMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_IMGDESCR_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Description', '0', '', '2002-05-13 19:04:28', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('3', 'CMS_TEXT', '/**\r\n * CMS_TEXT\r\n */\r\ncInclude("includes", "functions.lang.php");\r\n\r\n$tmp = $a_content["CMS_TEXT"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = nl2br($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp);\r\n\r\n$tmp = str_replace("
    ","
    ", $tmp);\r\nif ($edit) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_TEXT&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_TEXT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edittext.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Text / Standard', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('1', 'CMS_HTMLHEAD', '/**\r\n * CMS_HTMLHEAD\r\n */ \r\n$tmp = $a_content[''CMS_HTMLHEAD''][$val];\r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''","''",$tmp); \r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\ncInclude("includes", "functions.lang.php"); \r\n\r\nif ($edit) {\r\n if ($tmp == "") { \r\n $tmp = " "; \r\n } \r\n $insiteEditingDIV = new cHTMLDiv; \r\n $insiteEditingDIV->setId("HTMLHEAD_".$db->f("idtype")."_".$val);\r\n $insiteEditingDIV->setEvent("Focus", "this.style.border=''1px solid #bb5577'';"); \r\n $insiteEditingDIV->setEvent("Blur", "this.style.border=''1px dashed #bfbfbf'';"); \r\n $insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf"); \r\n $insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang)); \r\n \r\n $insiteEditingDIV->updateAttributes(array("contentEditable" => "true")); \r\n \r\n $insiteEditingDIV->setContent("_REPLACEMENT_"); \r\n \r\n\r\n /* Edit anchor and image */ \r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTMLHEAD&typenr=$val");\r\n $editAnchor = new cHTMLLink; \r\n $editAnchor->setClass(''CMS_HTMLHEAD_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''" . $editLink . "'');"); \r\n \r\n $editButton = new cHTMLImage; \r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithead.gif");\r\n $editButton->setBorder(0); \r\n $editButton->setStyleDefinition("margin-right", "2px"); \r\n \r\n $editAnchor->setContent($editButton); \r\n \r\n \r\n /* Save anchor and image */ \r\n $saveAnchor = new cHTMLLink; \r\n $saveAnchor->setClass(''CMS_HTMLHEAD_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $saveAnchor->setLink("javascript:setcontent(''$idartlang'',''0'')"); \r\n \r\n $saveButton = new cHTMLImage; \r\n $saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif"); \r\n $saveButton->setBorder(0); \r\n \r\n $saveAnchor->setContent($saveButton); \r\n\r\n /* Process for output with echo */ \r\n $finalEditButton = $editAnchor->render(); \r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton)); \r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton); \r\n \r\n $finalEditingDiv = $insiteEditingDIV->render(); \r\n $finalEditingDiv = AddSlashes(AddSlashes($finalEditingDiv)); \r\n $finalEditingDiv = str_replace("\\\\\\''","''",$finalEditingDiv); \r\n \r\n $finalEditingDiv = str_replace("_REPLACEMENT_", $tmp, $finalEditingDiv); \r\n \r\n $finalSaveButton = $saveAnchor->render(); \r\n $finalSaveButton = AddSlashes(AddSlashes($finalSaveButton)); \r\n $finalSaveButton = str_replace("\\\\\\''","''",$finalSaveButton); \r\n \r\n $tmp = $finalEditingDiv . $finalEditButton . $finalSaveButton;\r\n}', 'Headline / HTML', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); -INSERT INTO !PREFIX!_type VALUES('2', 'CMS_HTML', '/** \r\n * CMS_HTML \r\n */ \r\n$tmp = $a_content[''CMS_HTML''][$val]; \r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''","''",$tmp); \r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\ncInclude("includes", "functions.lang.php"); \r\n\r\nif ($edit) { \r\n if ($tmp == "") { \r\n $tmp = " "; \r\n } \r\n $insiteEditingDIV = new cHTMLDiv; \r\n $insiteEditingDIV->setId("HTML_".$db->f("idtype")."_".$val); \r\n $insiteEditingDIV->setEvent("Focus", "this.style.border=''1px solid #bb5577'';"); \r\n $insiteEditingDIV->setEvent("Blur", "this.style.border=''1px dashed #bfbfbf'';"); \r\n $insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf"); \r\n $insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang)); \r\n \r\n $insiteEditingDIV->updateAttributes(array("contentEditable" => "true")); \r\n \r\n $insiteEditingDIV->setContent("_REPLACEMENT_"); \r\n \r\n\r\n /* Edit anchor and image */ \r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTML&typenr=$val"); \r\n $editAnchor = new cHTMLLink; \r\n $editAnchor->setClass(''CMS_HTML_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''" . $editLink . "'');"); \r\n \r\n $editButton = new cHTMLImage; \r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithtml.gif"); \r\n $editButton->setBorder(0); \r\n $editButton->setStyleDefinition("margin-right", "2px"); \r\n \r\n $editAnchor->setContent($editButton); \r\n \r\n \r\n /* Save anchor and image */ \r\n $saveAnchor = new cHTMLLink; \r\n $saveAnchor->setClass(''CMS_HTML_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $saveAnchor->setLink("javascript:setcontent(''$idartlang'',''0'')"); \r\n \r\n $saveButton = new cHTMLImage; \r\n $saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif"); \r\n $saveButton->setBorder(0); \r\n \r\n $saveAnchor->setContent($saveButton); \r\n\r\n /* Process for output with echo */ \r\n $finalEditButton = $editAnchor->render(); \r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton)); \r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton); \r\n \r\n $finalEditingDiv = $insiteEditingDIV->render(); \r\n $finalEditingDiv = AddSlashes(AddSlashes($finalEditingDiv)); \r\n $finalEditingDiv = str_replace("\\\\\\''","''",$finalEditingDiv); \r\n \r\n $finalEditingDiv = str_replace("_REPLACEMENT_", $tmp, $finalEditingDiv); \r\n \r\n $finalSaveButton = $saveAnchor->render(); \r\n $finalSaveButton = AddSlashes(AddSlashes($finalSaveButton)); \r\n $finalSaveButton = str_replace("\\\\\\''","''",$finalSaveButton); \r\n \r\n $tmp = $finalEditingDiv . $finalEditButton . $finalSaveButton;\r\n}', 'Text / HTML', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); \ No newline at end of file +INSERT INTO !PREFIX!_type VALUES('5', 'CMS_IMGDESCR', '/**\r\n * CMS_IMGDESCR\r\n */\r\n$tmp = $a_content["CMS_IMGDESCR"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlentities($tmp,ENT_QUOTES);\r\n\r\n\r\nif (!empty($edit)) {\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_IMG&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_IMGDESCR_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_editimage.gif");\r\n $editButton->setBorder(0);\r\n \r\n $editAnchor->setContent($editButton);\r\n\r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Description', '0', '', '2002-05-13 19:04:28', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('3', 'CMS_TEXT', '/**\r\n * CMS_TEXT\r\n */\r\ncInclude("includes", "functions.lang.php");\r\n\r\n$tmp = $a_content["CMS_TEXT"][$val];\r\n$tmp = urldecode($tmp);\r\n$tmp = htmlspecialchars($tmp);\r\n$tmp = nl2br($tmp);\r\n$tmp = str_replace("''", "\\''", $tmp);\r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp);\r\n\r\n$tmp = str_replace("
    ","
    ", $tmp);\r\nif (!empty($edit)) {\r\n\r\n /* Edit anchor and image */\r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_TEXT&typenr=$val&lang=$lang");\r\n $editAnchor = new cHTMLLink;\r\n $editAnchor->setClass(''CMS_TEXT_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''".$editLink."'');");\r\n //Save all content\r\n \r\n $editButton = new cHTMLImage;\r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edittext.gif");\r\n $editButton->setBorder(0);\r\n $editButton->setStyleDefinition("margin-right", "2px");\r\n \r\n $editAnchor->setContent($editButton);\r\n \r\n /* Process for output with echo */\r\n $finalEditButton = $editAnchor->render();\r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton));\r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton);\r\n\r\n $tmp = $tmp.$finalEditButton;\r\n}', 'Text / Standard', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('1', 'CMS_HTMLHEAD', '/**\r\n * CMS_HTMLHEAD\r\n */ \r\n$tmp = $a_content[''CMS_HTMLHEAD''][$val];\r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''","''",$tmp); \r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\ncInclude("includes", "functions.lang.php"); \r\n\r\nif (!empty($edit)) {\r\n if ($tmp == "") { \r\n $tmp = " "; \r\n } \r\n $insiteEditingDIV = new cHTMLDiv; \r\n $insiteEditingDIV->setId("HTMLHEAD_".$db->f("idtype")."_".$val);\r\n $insiteEditingDIV->setEvent("Focus", "this.style.border=''1px solid #bb5577'';"); \r\n $insiteEditingDIV->setEvent("Blur", "this.style.border=''1px dashed #bfbfbf'';"); \r\n $insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf"); \r\n $insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang)); \r\n \r\n $insiteEditingDIV->updateAttributes(array("contentEditable" => "true")); \r\n \r\n $insiteEditingDIV->setContent("_REPLACEMENT_"); \r\n \r\n\r\n /* Edit anchor and image */ \r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTMLHEAD&typenr=$val");\r\n $editAnchor = new cHTMLLink; \r\n $editAnchor->setClass(''CMS_HTMLHEAD_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''" . $editLink . "'');"); \r\n \r\n $editButton = new cHTMLImage; \r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithead.gif");\r\n $editButton->setBorder(0); \r\n $editButton->setStyleDefinition("margin-right", "2px"); \r\n \r\n $editAnchor->setContent($editButton); \r\n \r\n \r\n /* Save anchor and image */ \r\n $saveAnchor = new cHTMLLink; \r\n $saveAnchor->setClass(''CMS_HTMLHEAD_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $saveAnchor->setLink("javascript:setcontent(''$idartlang'',''0'')"); \r\n \r\n $saveButton = new cHTMLImage; \r\n $saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif"); \r\n $saveButton->setBorder(0); \r\n \r\n $saveAnchor->setContent($saveButton); \r\n\r\n /* Process for output with echo */ \r\n $finalEditButton = $editAnchor->render(); \r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton)); \r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton); \r\n \r\n $finalEditingDiv = $insiteEditingDIV->render(); \r\n $finalEditingDiv = AddSlashes(AddSlashes($finalEditingDiv)); \r\n $finalEditingDiv = str_replace("\\\\\\''","''",$finalEditingDiv); \r\n \r\n $finalEditingDiv = str_replace("_REPLACEMENT_", $tmp, $finalEditingDiv); \r\n \r\n $finalSaveButton = $saveAnchor->render(); \r\n $finalSaveButton = AddSlashes(AddSlashes($finalSaveButton)); \r\n $finalSaveButton = str_replace("\\\\\\''","''",$finalSaveButton); \r\n \r\n $tmp = $finalEditingDiv . $finalEditButton . $finalSaveButton;\r\n}', 'Headline / HTML', '0', '', '0000-00-00 00:00:00', '2009-04-14 13:56:58'); +INSERT INTO !PREFIX!_type VALUES('2', 'CMS_HTML', '/** \r\n * CMS_HTML \r\n */ \r\n$tmp = $a_content[''CMS_HTML''][$val]; \r\n$tmp = urldecode($tmp); \r\n\r\n$tmp = AddSlashes(AddSlashes($tmp)); \r\n$tmp = str_replace("\\\\\\''","''",$tmp); \r\n$tmp = str_replace("\\$",''\\\\\\$'',$tmp); \r\n\r\ncInclude("includes", "functions.lang.php"); \r\n\r\nif (!empty($edit)) { \r\n if ($tmp == "") { \r\n $tmp = " "; \r\n } \r\n $insiteEditingDIV = new cHTMLDiv; \r\n $insiteEditingDIV->setId("HTML_".$db->f("idtype")."_".$val); \r\n $insiteEditingDIV->setEvent("Focus", "this.style.border=''1px solid #bb5577'';"); \r\n $insiteEditingDIV->setEvent("Blur", "this.style.border=''1px dashed #bfbfbf'';"); \r\n $insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf"); \r\n $insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang)); \r\n \r\n $insiteEditingDIV->updateAttributes(array("contentEditable" => "true")); \r\n \r\n $insiteEditingDIV->setContent("_REPLACEMENT_"); \r\n \r\n\r\n /* Edit anchor and image */ \r\n $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTML&typenr=$val"); \r\n $editAnchor = new cHTMLLink; \r\n $editAnchor->setClass(''CMS_HTML_''.$val.''_EDIT CMS_LINK_EDIT'');\r\n $editAnchor->setLink("javascript:setcontent(''$idartlang'',''" . $editLink . "'');"); \r\n \r\n $editButton = new cHTMLImage; \r\n $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithtml.gif"); \r\n $editButton->setBorder(0); \r\n $editButton->setStyleDefinition("margin-right", "2px"); \r\n \r\n $editAnchor->setContent($editButton); \r\n \r\n \r\n /* Save anchor and image */ \r\n $saveAnchor = new cHTMLLink; \r\n $saveAnchor->setClass(''CMS_HTML_''.$val.''_SAVE CMS_LINK_SAVE'');\r\n $saveAnchor->setLink("javascript:setcontent(''$idartlang'',''0'')"); \r\n \r\n $saveButton = new cHTMLImage; \r\n $saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif"); \r\n $saveButton->setBorder(0); \r\n \r\n $saveAnchor->setContent($saveButton); \r\n\r\n /* Process for output with echo */ \r\n $finalEditButton = $editAnchor->render(); \r\n $finalEditButton = AddSlashes(AddSlashes($finalEditButton)); \r\n $finalEditButton = str_replace("\\\\\\''","''",$finalEditButton); \r\n \r\n $finalEditingDiv = $insiteEditingDIV->render(); \r\n $finalEditingDiv = AddSlashes(AddSlashes($finalEditingDiv)); \r\n $finalEditingDiv = str_replace("\\\\\\''","''",$finalEditingDiv); \r\n \r\n $finalEditingDiv = str_replace("_REPLACEMENT_", $tmp, $finalEditingDiv); \r\n \r\n $finalSaveButton = $saveAnchor->render(); \r\n $finalSaveButton = AddSlashes(AddSlashes($finalSaveButton)); \r\n $finalSaveButton = str_replace("\\\\\\''","''",$finalSaveButton); \r\n \r\n $tmp = $finalEditingDiv . $finalEditButton . $finalSaveButton;\r\n}', 'Text / HTML', '0', '', '2002-05-13 19:04:13', '2009-04-14 13:56:58'); \ No newline at end of file diff --git a/setup/lib/defines.php b/setup/lib/defines.php index aec9db6..9eb0ec5 100644 --- a/setup/lib/defines.php +++ b/setup/lib/defines.php @@ -39,4 +39,4 @@ define('C_SETUP_STEPWIDTH', 28); define('C_SETUP_STEPHEIGHT', 28); define('C_SETUP_MIN_PHP_VERSION', '7.4.0'); define('C_SETUP_MAX_PHP_VERSION', '8.2.0'); -define('C_SETUP_VERSION', '2.2.0 beta'); \ No newline at end of file +define('C_SETUP_VERSION', '2.2.0 beta'); diff --git a/setup/steps/forms/clientmode.php b/setup/steps/forms/clientmode.php index aa90d75..ca9be72 100644 --- a/setup/steps/forms/clientmode.php +++ b/setup/steps/forms/clientmode.php @@ -48,7 +48,7 @@ class cSetupClientMode extends cSetupMask { $aChoices["CLIENT"] = i18n_setup("Client without examples"); $aChoices["NOCLIENT"] = i18n_setup("Don't create client"); - $sChoiceDefault = "CLIENTEXAMPLES"; + $sChoiceDefault = "NOCLIENT"; foreach ($aChoices as $sKey => $sChoice) { if ($sChoice == "none") {