diff --git a/branches/php7/config.php b/branches/php7/config.php new file mode 100644 index 0000000..8918a2a --- /dev/null +++ b/branches/php7/config.php @@ -0,0 +1,52 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * + * + * {@internal + * created unknown + * modified 2008-07-03, bilal arslan, added security fix + * + * $Id: config.php 450 2016-07-20 11:11:12Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Relative path to contenido directory, for all inclusions, in most cases: "../contenido/" +$contenido_path = "../conlite/"; + +// If language isn't specified, set this client and language (ID) +$load_lang = "1"; +$load_client = "1"; + +/* 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/branches/php7/css/basic-style.css b/branches/php7/css/basic-style.css new file mode 100644 index 0000000..a2c9e8b --- /dev/null +++ b/branches/php7/css/basic-style.css @@ -0,0 +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; } +} \ No newline at end of file diff --git a/branches/php7/css/conlite-demo.css b/branches/php7/css/conlite-demo.css new file mode 100644 index 0000000..6662565 --- /dev/null +++ b/branches/php7/css/conlite-demo.css @@ -0,0 +1,136 @@ +form#login_box { + width: 100%; +} + +form#login_box fieldset { + padding: 3px; + border-radius: 6px; +} + +input[type='submit'] { + background: #0099ff none repeat scroll 0 0; + border: 1px solid; + border-radius: 6px; + color: #fff; + margin: 5px 10px 5px 0; + padding: 5px; + text-decoration: none; +} + +footer #colophon { + position: relative; +} + +div#social-media-links { + position: absolute; + right: 0; + text-align: right; + width: 20%; + display: inline-block; +} + +a.social-media-icon { + width: 32px; + height: 32px; + background-image: url(../images/ico/social_icons_sprite.png); + display: inline-block; + color: rgba(0, 0, 0, 0); +} + +.facebook { + background-position: 0 0 !important; +} + +.facebook:hover { + background-position: 0 -32px !important; +} + +.pinterest { + background-position: -32px 0 !important; +} + +.pinterest:hover { + background-position: -32px -32px !important; +} + +.youtube { + background-position: -64px 0px !important; +} + +.youtube:hover { + background-position: -64px -32px !important; +} + +.flickr { + background-position: -96px 0px !important; +} + +.flickr:hover{ + background-position: -96px -32px !important; +} + +.google-plus { + background-position: -128px 0px !important; +} + +.google-plus:hover { + background-position: -128px -32px !important; +} + +.rss { + background-position: -160px 0 !important; +} + +.rss:hover { + background-position: -160px -32px !important; +} + + +.twitter { + background-position: -192px 0 !important; +} + +.twitter:hover { + background-position: -192px -32px !important; +} + + +.vimeo { + background-position: -224px 0 !important; +} + +.vimeo:hover { + background-position: -224px -32px !important; +} + +.dribble { + background-position: -256px 0 !important; +} + +.dribble:hover { + background-position: -256px -32px !important; +} + +.linkedin { + background-position: -288px 0 !important; +} + +.linkedin:hover { + background-position: -288px -32px !important; +} + +.xing { + background-position: -320px 0 !important; +} + +.xing:hover { + background-position: -320px -32px !important; +} + + + +@media only screen and (min-width: 920px) { + form#login_box input { + max-width: 100px; + } +} \ No newline at end of file diff --git a/branches/php7/css/index.php b/branches/php7/css/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/php7/css/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/php7/css/normalize.css b/branches/php7/css/normalize.css new file mode 100644 index 0000000..68fcfea --- /dev/null +++ b/branches/php7/css/normalize.css @@ -0,0 +1,530 @@ +/*! normalize.css v1.1.0 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * Known issue: no IE 6 support. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-size: 100%; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -ms-text-size-adjust: 100%; /* 2 */ +} + +/** + * Address `font-family` inconsistency between `textarea` and other form + * elements. + */ + +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} + +/** + * Address margins handled incorrectly in IE 6/7. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address font sizes and margins set differently in IE 6/7. + * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * Address styling not present in IE 7/8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + * Known issue: no IE 6/7 normalization. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 6/7/8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address margins set differently in IE 6/7. + */ + +p, +pre { + margin: 1em 0; +} + +/** + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + +} + +/** + * Address CSS quotes not supported in IE 6/7. + */ + +q { + quotes: none; +} + +/** + * Address `quotes` property not supported in Safari 4. + */ + +q:before, +q:after { + content: ''; + content: none; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Lists + ========================================================================== */ + +/** + * Address margins set differently in IE 6/7. + */ + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * Address paddings set differently in IE 6/7. + */ + +menu, +ol, +ul { + padding: 0 0 0 40px; +} + +/** + * Correct list images handled incorrectly in IE 7. + */ + +nav ul, +nav ol { + list-style: none; + list-style-image: none; + padding:0; + margin:0; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * 2. Improve image quality when scaled in IE 7. + */ + +img { + border: 0; /* 1 */ + -ms-interpolation-mode: bicubic; /* 2 */ +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Correct margin displayed oddly in IE 6/7. + */ + +form { + margin: 0; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct color not being inherited in IE 6/7/8/9. + * 2. Correct text not wrapping in Firefox 3. + * 3. Correct alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; + white-space: normal; /* 2 */ + *margin-left: -7px; /* 3 */ +} + +/** + * 1. Correct font size not being inherited in all browsers. + * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * and Chrome. + * 3. Improve appearance and consistency in all browsers. + */ + +button, +input, +select, +textarea { + font-size: 100%; /* 1 */ + margin: 0; /* 2 */ + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ +} + +/** + * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + *overflow: visible; /* 4 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to content-box in IE 8/9. + * 2. Remove excess padding in IE 8/9. + * 3. Remove excess padding in IE 7. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 3+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/branches/php7/dbfs.php b/branches/php7/dbfs.php new file mode 100644 index 0000000..50210ca --- /dev/null +++ b/branches/php7/dbfs.php @@ -0,0 +1,66 @@ + + * + * Requirements: + * @con_php_req 5 + * @con_template + * @con_notice + * + * + * @package ContenidoBackendArea + * @author unknown + * @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 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: dbfs.php 450 2016-07-20 11:11:12Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +$contenido_path = ''; +# include the config file of the frontend to init the Client and Language Id +include_once ("config.php"); + +// Contenido startup process +include_once ($contenido_path . 'includes/startup.php'); + +if ($contenido) +{ + page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +} else { + page_open(array('sess' => 'Contenido_Frontend_Session', + 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); +} + +/* Shorten load time */ +$client = $load_client; + +$dbfs = new DBFSCollection; +$dbfs->outputFile($file); + +page_close(); + +?> \ No newline at end of file diff --git a/branches/php7/error.php b/branches/php7/error.php new file mode 100644 index 0000000..e18b0eb --- /dev/null +++ b/branches/php7/error.php @@ -0,0 +1,13 @@ + + + Fehler + + + + + + + +  + + diff --git a/branches/php7/favicon.ico b/branches/php7/favicon.ico new file mode 100644 index 0000000..fbca42b Binary files /dev/null and b/branches/php7/favicon.ico differ diff --git a/branches/php7/front_content.php b/branches/php7/front_content.php new file mode 100644 index 0000000..0fb2500 --- /dev/null +++ b/branches/php7/front_content.php @@ -0,0 +1,949 @@ + + * @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 + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +$contenido_path = ''; +# include the config file of the frontend to init the Client and Language Id +include_once ("config.php"); + +# Contenido startup process +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) +{ + /* Include cronjob-Emulator */ + $oldpwd = getcwd(); + chdir($cfg["path"]["contenido"].$cfg["path"]["cronjobs"]); + cInclude("includes", "pseudo-cron.inc.php"); + chdir($oldpwd); +} + +/* + * Initialize the Database Abstraction Layer, the Session, Authentication and Permissions Handler of the + * PHPLIB application development toolkit + * @see http://sourceforge.net/projects/phplib + */ +if ($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 +{ + //Frontend + 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; + +$sess->register("cfgClient"); +$sess->register("errsite_idcat"); +$sess->register("errsite_idart"); +$sess->register("encoding"); + +if ($cfgClient["set"] != "set") +{ + rereadClients(); +} + +# Check if this request is for a compressed file +if ($_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"]; + $db->query($sql); + while ($db->next_record()) { + $encoding[$db->f('idlang')] = $db->f('encoding'); + } +} + + +// Check frontend globals +// @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)){ + // load_client is set in frontend/config.php + $lang = $load_lang; + }else{ + + $sql = "SELECT + B.idlang + FROM + ".$cfg["tab"]["clients_lang"]." AS A, + ".$cfg["tab"]["lang"]." AS B + WHERE + A.idclient='".Contenido_Security::toInteger($client)."' AND + A.idlang = B.idlang + LIMIT + 0,1"; + + $db->query($sql); + $db->next_record(); + + $lang = $db->f("idlang"); + } +} + +if (!$sess->is_registered("lang") ) $sess->register("lang"); +if (!$sess->is_registered("client") ) $sess->register("client"); + +if (isset ($username)) +{ + $auth->login_if(true); +} + +/* + * Send HTTP header with encoding + */ +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)) +{ + $auth->logout(true); + $auth->unauth(true); + $auth->auth["uname"] = "nobody"; +} + +/* + * local configuration + */ +if (file_exists("config.local.php")) +{ + @ include ("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) +{ + /* Which resolve method is configured? */ + if ($cfg["urlpathresolve"] == true) + { + + $iLangCheck = 0; + $idcat = prResolvePathViaURLNames($path, $iLangCheck); + + } + else + { + $iLangCheck = 0; + + $idcat = prResolvePathViaCategoryNames($path, $iLangCheck); + 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' +); +$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) +{ + /* Try to fetch the first idcat */ + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + if ($db->next_record()) + { + $idcat = $db->f("idcat"); + } +} + +unset ($code); +unset ($markscript); + +if (!$idcatart) +{ + if (!$idart) + { + if (!$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) + { + $sql = "SELECT + idart, + B.idcat + FROM + ".$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)."' + ORDER BY + idtree ASC"; + } + 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 + WHERE + A.idcat=B.idcat AND + B.idcat=C.idcat AND + D.startidartlang = E.idartlang 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)."' + ORDER BY + idtree ASC"; + } + + $db->query($sql); + + if ($db->next_record()) { + $idart = $db->f("idart"); + $idcat = $db->f("idcat"); + } else { + if($contenido) { + cInclude("includes", "functions.i18n.php"); + die(i18n("No start article for this category")); + } 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; + } + } + } + } 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'"; + $db->query($sql); + + 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)."'"; + $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"))."'"; + $db->query($sql); + $db->next_record(); + $idart = $db->f("idart"); + } + } + } + + if ($idart != -1) + { + } + else + { + // error message in backend + if ($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 + { + header($errsite); + exit; + } + } + } + } + } +} +else +{ + $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + + $db->query($sql); + $db->next_record(); + + $idcat = $db->f("idcat"); + $idart = $db->f("idart"); +} + +/* 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)."'"; + + $db->query($sql); + $db->next_record(); + + $idcatart = $db->f("idcatart"); +} + +$idartlang = getArtLang($idart, $lang); + +if ($idartlang === false) +{ + header($errsite); + exit; +} + +/* + * removed database roundtrip for checking + * if cache is enabled + * CON-115 + * 2008-06-25 Thorsten Granz + */ +// START: concache, murat purc +if ($cfg["cache"]["disable"] != '1') { + cInclude('frontend', 'includes/concache.php'); + $oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], $db); + $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 +############################################## + +/** + * If user has contenido-backend rights. + * $contenido <==> the cotenido backend session as http global + * In Backend: e.g. contenido/index.php?contenido=dac651142d6a6076247d3afe58c8f8f2 + * Can also be set via front_content.php?contenido=dac651142d6a6076247d3afe58c8f8f2 + * + * Note: In backend the file contenido/external/backendedit/front_content.php is included! + * The reason is to avoid cross-site scripting errors in the backend, if the backend domain differs from + * the frontend domain. + */ +if ($contenido) +{ + $perm->load_permissions(); + + /* Change mode edit / view */ + if (isset ($changeview)) + { + $sess->register("view"); + $view = $changeview; + } + + $col = new InUseCollection; + + 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"); + + $sHtmlInUse = ''; + $sHtmlInUseMessage = ''; + if ($inUse == true) + { + $disabled = 'disabled="disabled"'; + $sHtmlInUseCss = ''; + $sHtmlInUseMessage = $message; + } + + $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) + { + $inUse = true; + $disabled = 'disabled="disabled"'; + } + + // 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'] + ); + + 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") + { + $edit_preview = ' + + + '; + } + 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"; + + $db->query($sql); + } + else + { + $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + + $db->query($sql); + } + + $a = 1; + + $edit_preview .= '
+ Preview + + Preview +
+ Preview + + Edit +
Articles in category:
'; + + 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)) + { + $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline ;font-weight:bold"; + } + } + 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 .= '
'; + + } + +} // 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))) +{ + cInclude("includes", "functions.tpl.php"); + cInclude("includes", "functions.con.php"); + 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) + { + $markscript = markSubMenuItem(4, true); + } + + unset($edit); // disable editmode + + /* 'mode' is preview (Area: Contenido --> Articles --> Preview) or article displayed in the front-end */ + $sql = "SELECT + createcode + FROM + ".$cfg["tab"]["cat_art"]." + WHERE + idcat = '".Contenido_Security::toInteger($idcat)."' AND + idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + $db->next_record(); + + ############################################## + # code generation + ############################################## + + /* Check if code is expired, create new code if needed */ + 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) + { + /* 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)."'"; + $db->query($sql); + } + + if ($db->next_record()) + { + $code = stripslashes($db->f("code")); + } + else + { + if ($contenido) + $code = "echo \"No code available.\";"; + else + { + if ($error == 1) + { + echo "Fatal error: Could not display error page. Error to display was: 'No code available'"; + } + else + { + header($errsite); + exit; + } + } + } + } else { + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + + cInclude("includes", "functions.con.php"); + cInclude("includes", "functions.tpl.php"); + cInclude("includes", "functions.mod.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)."'"; + + $db->query($sql); + $db->next_record(); + + $code = stripslashes($db->f("code")); + } + + /* Add mark Script to code if user is in the backend */ + $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1); + + /* If article is in use, display notification */ + if ($sHtmlInUseCss && $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)."'"; + + $db->query($sql); + $db->next_record(); + + $public = $db->f("public"); + + ############################################## + # 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'"; + $db->query($sql); + + while ($db->next_record()) + { + $user_id = $db->f("user_id"); + + $range = urldecode($db->f("value")); + $slash = strpos($range, "/"); + + if ($slash == false) + { + $netmask = "255.255.255.255"; + $network = $range; + } + else + { + $network = substr($range, 0, $slash); + $netmask = substr($range, $slash +1, strlen($range) - $slash -1); + } + + 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)."' + AND A.idarea = C.idarea AND B.idaction = A.idaction"; + + $db2 = new DB_Contenido; + $db2->query($sql); + + if ($db2->num_rows() > 0) + { + $auth->auth["uid"] = $user_id; + $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'] + ); + $auth->login_if(!$allow); + } + } + 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'] + ); + + /* + 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) + { + header($errsite); + exit; + } + } + } + + ############################################## + # statistic + ############################################## + $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)."'"; + $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)."'"; + $db->query($sql); + $db->next_record(); + if ($db->f("idartlang") == $idartlang) + { + $isstart = 1; + } + else + { + $isstart = 0; + } + } + + ############################################## + # time management + ############################################## + $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)."' + 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)."'"; + } + + $db->query($sql); + $db->next_record(); + + $online = $db->f("online"); + $redirect = $db->f("redirect"); + $redirect_url = $db->f("redirect_url"); + + @ eval ("\$"."redirect_url = \"$redirect_url\";"); // transform variables + + $insert_base = getEffectiveSetting('generator', 'basehref', "true"); + + /* + * generate base url + */ + if ($insert_base == "true") + { + $is_XHTML = getEffectiveSetting('generator', 'xhtml', "false"); + + $str_base_uri = $cfgClient[$client]["path"]["htmlpath"]; + + // CEC for base href generation + $str_base_uri = CEC_Hook::executeAndReturn('Contenido.Frontend.BaseHrefGeneration', $str_base_uri); + + if ($is_XHTML == "true") { + $baseCode = ''; + } else { + $baseCode = ''; + } + + $code = str_ireplace_once("", "\n".$baseCode, $code); + } + + /* + * Handle online (offline) articles + */ + if ($online) + { + if ($redirect == '1' && $redirect_url != '') + { + page_close(); + /* + * Redirect to the URL defined in article properties + */ + $oUrl = Contenido_Url::getInstance(); + if ($oUrl->isIdentifiableFrontContentUrl($redirect_url)) { + // perform urlbuilding only for identified internal urls + $aUrl = $oUrl->parse($redirect_url); + if (!isset($aUrl['params']['lang'])) { + $aUrl['params']['lang'] = $lang; + } + $redirect_url = $oUrl->buildRedirect($aUrl['params']); + } + header("Location: $redirect_url"); + exit; + } + else + { + if ($cfg["debug"]["codeoutput"]) + { + echo ""; + } + + /* + * That's it! The code of an article will be evaluated. + * The code of an article is basically a PHP script which is cached in the database. + * Layout and Modules are merged depending on the Container definitions of the Template. + */ + + $aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', '')); + if (in_array(Contenido_Security::toInteger($idart), $aExclude)) { + eval ("?>\n".$code."\n\n".$code."\n\n".$code."\nend(); + #echo $oCacheHandler->getInfo(); +} +// END: concache + +/* + * configuration settings after the site is displayed. + */ +if (file_exists("config.after.php")) +{ + @ include ("config.after.php"); +} + +if (isset ($savedlang)) +{ + $lang = $savedlang; +} + +$db->disconnect(); +page_close(); +?> \ No newline at end of file diff --git a/branches/php7/front_crcloginform.inc.php b/branches/php7/front_crcloginform.inc.php new file mode 100644 index 0000000..1dd27a8 --- /dev/null +++ b/branches/php7/front_crcloginform.inc.php @@ -0,0 +1,153 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: front_crcloginform.inc.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +/** + * security check + */ +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +global $cfg, $idcat, $idart, $idcatart, $lang, $client, $username, $encoding; + +$err_catart = trim(getEffectiveSetting("login_error_page", "idcatart", "")); +$err_cat = trim(getEffectiveSetting("login_error_page", "idcat", "")); +$err_art = trim(getEffectiveSetting("login_error_page", "idart", "")); + +$oUrl = Contenido_Url::getInstance(); + +$sClientHtmlPath = $cfgClient[$client]['path']['htmlpath']; + +$sUrl = $sClientHtmlPath . 'front_content.php'; + +$sErrorUrl = $sUrl; +$bRedirect = false; + +if ($err_catart != '') { + $sErrorUrl .= '?idcatart=' . $err_catart . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_art != '' && $err_cat != '') { + $sErrorUrl .= '?idcat=' . $err_cat . '&idart=' . $err_art . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_cat != '') { + $sErrorUrl .= '?idcat=' . $err_cat . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_art != '') { + $sErrorUrl .= '?idart=' . $err_art . '&lang=' . $lang; + $bRedirect = true; +} + +if ($bRedirect) { + $aUrl = $oUrl->parse($sess->url($sErrorUrl)); + $sErrorUrl = $oUrl->buildRedirect($aUrl['params']); + header('Location: ' . $sErrorUrl); + exit(); +} + +if (isset($_GET['return']) || isset($_POST['return'])){ + $aLocator = array('lang=' . (int) $lang); + + if ($idcat > 0) { + $aLocator[] = 'idcat=' . intval($idcat); + } + if ($idart > 0) { + $aLocator[] = 'idart=' . intval($idart); + } + if (isset($_POST['username']) || isset($_GET['username'])){ + $aLocator[] = 'wrongpass=1'; + } + + $sErrorUrl = $sUrl . '?' . implode('&', $aLocator); + $aUrl = $oUrl->parse($sess->url($sErrorUrl)); + $sErrorUrl = $oUrl->buildRedirect($aUrl['params']); + header ('Location: ' . $sErrorUrl); + exit(); +} + +// set form action +$sFormAction = $sess->url($sUrl . '?idcat=' . intval($idcat) . '&lang=' . $lang); +$aUrl = $oUrl->parse($sFormAction); +$sFormAction = $oUrl->build($aUrl['params']); + +// set login input image, use button as fallback +if ( file_exists($cfgClient[$client]['path']['frontend'] . 'images/but_ok.gif') ) { + $sLoginButton = '' . "\n"; +} else { + $sLoginButton = '' . "\n"; +} + +?> + + + + + :: :: :: :: Contenido Login + + + + + +
+
+ + + +
Login
+
+
+
+
+
+
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/branches/php7/images/SimpleGallery/ClosePopup.png b/branches/php7/images/SimpleGallery/ClosePopup.png new file mode 100644 index 0000000..d3881e4 Binary files /dev/null and b/branches/php7/images/SimpleGallery/ClosePopup.png differ diff --git a/branches/php7/images/SimpleGallery/Loading.gif b/branches/php7/images/SimpleGallery/Loading.gif new file mode 100644 index 0000000..9572958 Binary files /dev/null and b/branches/php7/images/SimpleGallery/Loading.gif differ diff --git a/branches/php7/images/SimpleGallery/NaviLeft.png b/branches/php7/images/SimpleGallery/NaviLeft.png new file mode 100644 index 0000000..a4591f6 Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviLeft.png differ diff --git a/branches/php7/images/SimpleGallery/NaviLeftDisabled.png b/branches/php7/images/SimpleGallery/NaviLeftDisabled.png new file mode 100644 index 0000000..2ffddf9 Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviLeftDisabled.png differ diff --git a/branches/php7/images/SimpleGallery/NaviRight.png b/branches/php7/images/SimpleGallery/NaviRight.png new file mode 100644 index 0000000..80c4d76 Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviRight.png differ diff --git a/branches/php7/images/SimpleGallery/NaviRightDisabled.png b/branches/php7/images/SimpleGallery/NaviRightDisabled.png new file mode 100644 index 0000000..daebe5f Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviRightDisabled.png differ diff --git a/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png b/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png new file mode 100644 index 0000000..f45a0e2 Binary files /dev/null and b/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png differ diff --git a/branches/php7/images/SimpleGallery/PopupImageNaviRight.png b/branches/php7/images/SimpleGallery/PopupImageNaviRight.png new file mode 100644 index 0000000..9be9ee5 Binary files /dev/null and b/branches/php7/images/SimpleGallery/PopupImageNaviRight.png differ diff --git a/branches/php7/images/SimpleGallery/ZoomOverlay.png b/branches/php7/images/SimpleGallery/ZoomOverlay.png new file mode 100644 index 0000000..d3c2bdf Binary files /dev/null and b/branches/php7/images/SimpleGallery/ZoomOverlay.png differ diff --git a/branches/php7/images/glyphicons-halflings-white.png b/branches/php7/images/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 Binary files /dev/null and b/branches/php7/images/glyphicons-halflings-white.png differ diff --git a/branches/php7/images/glyphicons-halflings.png b/branches/php7/images/glyphicons-halflings.png new file mode 100644 index 0000000..a996999 Binary files /dev/null and b/branches/php7/images/glyphicons-halflings.png differ diff --git a/branches/php7/images/ico/apple-touch-icon-114-precomposed.png b/branches/php7/images/ico/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000..dbd92fa Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-114-precomposed.png differ diff --git a/branches/php7/images/ico/apple-touch-icon-144-precomposed.png b/branches/php7/images/ico/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000..b85ecd0 Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-144-precomposed.png differ diff --git a/branches/php7/images/ico/apple-touch-icon-57-precomposed.png b/branches/php7/images/ico/apple-touch-icon-57-precomposed.png new file mode 100644 index 0000000..17a7748 Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-57-precomposed.png differ diff --git a/branches/php7/images/ico/apple-touch-icon-72-precomposed.png b/branches/php7/images/ico/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000..da2b86c Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-72-precomposed.png differ diff --git a/branches/php7/images/ico/social_icons_sprite.png b/branches/php7/images/ico/social_icons_sprite.png new file mode 100644 index 0000000..f79efb1 Binary files /dev/null and b/branches/php7/images/ico/social_icons_sprite.png differ diff --git a/branches/php7/images/index.php b/branches/php7/images/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/php7/images/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/php7/images/logo-small.png b/branches/php7/images/logo-small.png new file mode 100644 index 0000000..f9bc9dd Binary files /dev/null and b/branches/php7/images/logo-small.png differ diff --git a/branches/php7/images/logo.png b/branches/php7/images/logo.png new file mode 100644 index 0000000..edcf5ec Binary files /dev/null and b/branches/php7/images/logo.png differ diff --git a/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php b/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php new file mode 100644 index 0000000..cc442e2 --- /dev/null +++ b/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php @@ -0,0 +1,85 @@ + + * + * $Id: Contenido_NavMain_Util.class.php 450 2016-07-20 11:11:12Z oldperl $ + */ + +class Contenido_NavMain_Util { + /** + * Recursive Loop over all (sub)categories. + * Each level will be assigned a css class navmainStandardLevel_x + * + * @param Contenido_Category $oCategory + * @param Contenido_FrontendNavigation $oFrontendNavigation + * @param Template $oTpl + * @param string $sUrlStyle + * @param array $aCfg + * @param int $iLang + * @param array $aLevelInfo Information for marking active cat per levels + * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount) + * @return void + */ + public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, array $aCfg, $iLang, array $aLevelInfo, $iCurrentPageIdcat, array $aDepthInfo = array()) { + $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1; + $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1; + // display current item + $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat()); + if (!isset($aLevelInfo[$oCategory->getIdCat()])) { + $aLevelInfo[$oCategory->getIdCat()] = array(); + } + $oCurrentSubcategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat()); + $aLevelInfo[$oCategory->getIdCat()]['has_children'] = $oCurrentSubcategories->count() > 0; + $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = -1; + $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = -1; + $bMarkActive = $oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat); + if ($oCurrentSubcategories->count() > 0) { + $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = $oCurrentSubcategories[0]->getIdCat(); + $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = $oCurrentSubcategories[$oCurrentSubcategories->count()-1]->getIdCat(); + } + // this is just for sample client - modify to your needs! + if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) { + $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat()); + } else { + $aParams = array('a' => $oCategory->getIdCat(), + 'idcat' => $oCategory->getIdCat(), // needed to build category path + 'lang' => $iLang, // needed to build category path + 'level' => 1); // needed to build category path + } + // fill template with values + $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName()); + $oTpl->set('d', 'css_level', $iItemLevel); + $oTpl->set('d', 'css_first_item', ($aLevelInfo[$oCategory->getIdParent()]['first_child_item'] == $oCategory->getIdCat() ? ' first' : '')); + $oTpl->set('d', 'css_last_item', ($aLevelInfo[$oCategory->getIdParent()]['last_child_item'] == $oCategory->getIdCat() ? ' last' : '')); + $oTpl->set('d', 'css_active_item', ($bMarkActive === true ? ' active' : '')); + try { + $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams)); + } catch (InvalidArgumentException $e) { + $oTpl->set('d', 'url', '#'); + } + $oTpl->next(); + // continue until max level depth + if ($aDepthInfo[1] > $aDepthInfo[0]) { + // check if current item has sub-items to be displayed + $bShowFollowUps = ($oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat)) + ? true : false; + if ($bShowFollowUps === true && $oCurrentSubcategories->count() > 0) { + $oSubCategories = $oCurrentSubcategories; + foreach ($oSubCategories as $oSubCategory) { + self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $aCfg, $iLang, $aLevelInfo, $iCurrentPageIdcat, $aDepthInfo); + } + } + } + } +} +?> \ No newline at end of file diff --git a/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php b/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php new file mode 100644 index 0000000..3fc3b1b --- /dev/null +++ b/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php @@ -0,0 +1,66 @@ + + * + * $Id: Contenido_Sitemap_Util.class.php 450 2016-07-20 11:11:12Z oldperl $ + */ +class Contenido_Sitemap_Util { + /** + * Recursive Loop over all (sub)categories. + * Each level will be assigned a css class sitemapStandardLevel_x + * + * @param Contenido_Category $oCategory + * @param Contenido_FrontendNavigation $oFrontendNavigation + * @param Template $oTpl + * @param string $sUrlStyle + * @param array $aCfg + * @param int $iLang + * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount) + * @return void + */ + public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, $sUrlStyle, array $aCfg, $iLang, array $aDepthInfo = array()) { + $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1; + $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1; + // display current item + $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat()); + // this is just for sample client - modify to your needs! + if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) { + $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat()); + } else { + $aParams = array('a' => $oCategory->getIdCat(), + 'idcat' => $oCategory->getIdCat(), // needed to build category path + 'lang' => $iLang, // needed to build category path + 'level' => 1); // needed to build category path + } + // fill template with values + $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName()); + $oTpl->set('d', 'css_level', $iItemLevel); + try { + $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams)); + } catch (InvalidArgumentException $e) { + $oTpl->set('d', 'url', '#'); + } + $oTpl->next(); + // continue until max level depth + if ($aDepthInfo[1] > $aDepthInfo[0]) { + // check if current item has sub-items + $oSubCategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat()); + if ($oSubCategories->count() > 0) { + foreach ($oSubCategories as $oSubCategory) { + self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $sUrlStyle, $aCfg, $iLang, $aDepthInfo); + } + } + } + } +} +?> \ No newline at end of file diff --git a/branches/php7/includes/class.concache.php b/branches/php7/includes/class.concache.php new file mode 100644 index 0000000..72cadcc --- /dev/null +++ b/branches/php7/includes/class.concache.php @@ -0,0 +1,531 @@ + + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: class.concache.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +class cConCache{ + + /** + * PEAR Cache Output Object + * + * @var obj $_oPearCache + */ + var $_oPearCache; + + /** + * Flag 2 activate caching. + * + * @var bool $_bEnableCaching + */ + var $_bEnableCaching = false; + + /** + * Flag for output of debug informations. + * + * @var bool $_bDebug + */ + var $_bDebug = false; + + /** + * Flag 2 print html comment including some debug informations. + * + * @var bool $_bHtmlComment + */ + var $_bHtmlComment = false; + + /** + * Start time of caching. + * + * @var int $_iStartTime + */ + var $_iStartTime; + + /** + * Option array 4 generating cache identifier (e. g. $_GET,$_POST, $_COOKIE, ...). + * + * @var array _aIDOptions + */ + var $_aIDOptions; + + /** + * Option array 4 pear caching. + * + * @var array $_aIDOptions + */ + var $_aCacheOptions; + + /** + * Handler array 2 store code, beeing executed on some events. + * We have actually two events: + * - 'beforeoutput': code to execute before doing the output + * - 'afteroutput' code to execute after output + * + * @var array $_aEventCode + */ + var $_aEventCode; + + /** + * Unique identifier for caching. + * + * @var string $_sID + */ + var $_sID; + + /** + * Directory 2 store cached output. + * + * @var string $_sDir + */ + var $_sDir = 'cache/'; + + /** + * Subdirectory 2 store cached output. + * + * @var string $_sGroup + */ + var $_sGroup = 'default'; + + /** + * Substring 2 add as prefix to cache-filename. + * + * @var string $_sPrefix + */ + var $_sPrefix = 'cache_'; + + /** + * Default lifetime of cached files. + * + * @var int $_iLifetime + */ + var $_iLifetime = 3600; + + /** + * Used 2 store debug message. + * + * @var string $_sDebugMsg + */ + var $_sDebugMsg = ''; + + /** + * HTML code template used for debug message. + * + * @var string $_sDebugTpl + */ + var $_sDebugTpl = '
%s
'; + + /** + * HTML comment template used for generating some debug infos. + * + * @var string $_sDebugTpl + */ + var $_sHtmlCommentTpl = ' + +'; + + /** + * Constructor of cConCache + * + * @param string $cachedir Directory 2 cache files + * @param string $cachegroup Subdirectory 2 cache files + * @param string $cacheprefix Prefixname 2 add 2 cached files + */ + function cConCache($cachedir=null, $cachegroup=null, $cacheprefix=null){ + // wherever you want the cache files + if(!is_null($cachedir)){ + $this->_sDir = $cachedir; + } + + // subdirectory where you want the cache files + if(!is_null($cachegroup)){ + $this->_sGroup = $cachegroup; + } + + // optional a filename prefix + if(!is_null($cacheprefix)){ + $this->_sPrefix = $cacheprefix; + } + + // config options are passed to the cache as an array + $this->_aCacheOptions = array('cache_dir' => $this->_sDir, 'filename_prefix' => $this->_sPrefix); + + } // function cConCache() + + + /** + * Set/Get the flag 2 enable caching. + * + * @param bool $enable True 2 enable chaching or false + * @return mixed Enable flag or void + */ + function enable($enable=null){ + if(!is_null($enable) && is_bool($enable)){ + $this->_bEnableCaching = $enable; + } else { + return $this->_bEnableCaching; + } + } // function enable() + + + /** + * Set/Get the flag 2 debug cache object (prints out miss/hit state with execution time). + * + * @param bool $debug True 2 activate debugging or false. + * @return mixed Debug flag or void + */ + function debug($debug){ + if(!is_null($debug) && is_bool($debug)){ + $this->_bDebug = $debug; + } else { + return $this->_bDebug; + } + } // function debug() + + + /** + * Set/Get flag 2 print out cache info as html comment. + * + * @param bool $htmlcomment True debugging or false. + * @return void Htmlcomment flag or void + */ + function htmlComment($htmlcomment){ + if(!is_null($htmlcomment) && is_bool($htmlcomment)){ + $this->_bHtmlComment = $htmlcomment; + } else { + return $this->_bHtmlComment; + } + } // function htmlComment() + + + /** + * Set/Get caching lifetime in seconds. + * + * @param int $seconds New Lifetime in seconds + * @return mixed Actual lifetime or void + */ + function lifetime($seconds=null){ + if ($seconds != null && is_numeric($seconds) && $seconds > 0) { + $this->_iLifetime = $seconds; + } else { + return $this->_iLifetime; + } + } // function lifetime() + + + /** + * Set/Get template to use on printing the chache info. + * + * @param string $template Template string including the '%s' format definition. + * @return void + */ + function infoTemplate($template){ + $this->_sDebugTpl = $template; + } // function infoTemplate() + + + /** + * Add option 4 caching (e. g. $_GET,$_POST, $_COOKIE, ...). Used 2 generate the id for caching. + * + * @param string $name Name of option + * @param string $option Value of option (any variable) + * @return void + */ + function addOption($name, $option){ + $this->_aIDOptions[$name] = $option; + } // function addOption() + + + /** + * Returns information cache hit/miss and execution time if caching is enabled. + * + * @return string Information about cache if caching is enabled, otherwhise nothing. + */ + function getInfo(){ + if(!$this->_bEnableCaching){ return; } + return $this->_sDebugMsg; + } // function getInfo() + + + /** + * Handles PEAR caching. The script will be terminated by calling die(), if any cached + * content is found. + * + * @param int $iPageStartTime Optional start time, e. g. start time of main script + * @return void + */ + function start($iPageStartTime=null){ + if(!$this->_bEnableCaching){ return; } + + $this->_iStartTime = $this->_getMicroTime(); + + // set cache object and unique id + $this->_initPEARCache(); + + // check if it's cached and start the output buffering if neccessary + if ($content = $this->_oPearCache->start($this->_sID, $this->_sGroup)) { + + //raise beforeoutput event + $this->_raiseEvent('beforeoutput'); + + $iEndTime = $this->_getMicroTime(); + if ($this->_bHtmlComment) { + $time = sprintf("%2.4f", $iEndTime - $this->_iStartTime); + $exp = date('Y-m-d H:i:s', $this->_oPearCache->container->expires); + $content .= sprintf($this->_sHtmlCommentTpl, 'HIT', $time.' sec.', $exp); + if ($iPageStartTime != null && is_numeric($iPageStartTime)) { + $content .= ''; + } + } + + if ($this->_bDebug) { + $info = sprintf("HIT: %2.4f sec.", $iEndTime - $this->_iStartTime); + $info = sprintf($this->_sDebugTpl, $info); + $content = str_ireplace('', $info."\n", $content); + } + + echo $content; + + //raise afteroutput event + $this->_raiseEvent('afteroutput'); + + die(); + } + } // function start() + + + /** + * Handles ending of PEAR caching. + * + * @return void + */ + function end(){ + if (!$this->_bEnableCaching){ return; } + + // this might go into your auto_append file. store the data into the cache, default lifetime is set in $this->_iLifetime + $this->_oPearCache->endPrint($this->_iLifetime, __FILE__ . ' ' . filemtime(__FILE__)); + + if ($this->_bDebug) { + $this->_sDebugMsg .= "\n".sprintf("MISS: %2.4f sec.\n", $this->_getMicroTime() - $this->_iStartTime); + $this->_sDebugMsg = sprintf($this->_sDebugTpl, $this->_sDebugMsg); + } + } // function end() + + + /** + * Removes any cached content if exists. + * This is nesessary to delete cached articles, if they are changed on backend. + * + * @return void + */ + function removeFromCache(){ + // set cache object and unique id + $this->_initPEARCache(); + $bExists = $this->_oPearCache->isCached($this->_sID, $this->_sGroup); + if ($bExists) { + $this->_oPearCache->remove($this->_sID, $this->_sGroup); + } + } // function removeFromCache() + + + /* + * Creates one-time a instance of PEAR cache output object and also the unique id, + * if propery $this->_oPearCache is not set. + * + * @return void + * @access private + */ + function _initPEARCache(){ + if (is_object($this->_oPearCache)) { + return; + } + + // create a output cache object mode - file storage + cInclude('pear', 'Cache/Output.php'); + $this->_oPearCache = new Cache_Output('file', $this->_aCacheOptions); + + // generate an ID from whatever might influence the script behavoiur + $this->_sID = $this->_oPearCache->generateID($this->_aIDOptions); + } // function _initPEARCache() + + + /** + * Raises any defined event code by using eval(). + * + * @param string $name Name of event 2 raise + * @return void + * @access private + */ + function _raiseEvent($name){ + // check if event exists, get out if not + if (!isset($this->_aEventCode[$name]) && !is_array($this->_aEventCode[$name])) { + return; + } + + // loop array and execute each defined php-code + foreach ($this->_aEventCode[$name] as $code) { + eval($code); + } + + } // function _raiseEvent() + + + /** + * Returns microtime (Unix-Timestamp), used to calculate time of execution. + * + * @return float Timestamp + * @access private + */ + function _getMicroTime(){ + $mtime = explode(' ', microtime()); + $mtime = $mtime[1] + $mtime[0]; + return $mtime; + } // function _getMicroTime() + +} // class cConCache + + + +/** +* @class cConCacheHandler +* @brief Class cConCacheHandler. This is used to set configuration +* and to manage caching output +* @version 0.9 +* @date 07.07.2006 +* @author Murat Purc +* @copyright � Murat Purc 2006 +*/ +class cConCacheHandler extends cConCache { + + /** + * Constructor of cConCacheHandler. + * Does some checks and sets the configuration of cache object. + * + * @param array $aConf Configuration of caching as follows: + * - $a['excludecontenido'] bool. don't cache output, if we have a contenido variable, + * e. g. on calling frontend preview from backend + * - $a['enable'] bool. activate caching of frontend output + * - $a['debug'] bool. compose debuginfo (hit/miss and execution time of caching) + * - $a['infotemplate'] string. debug information template + * - $a['htmlcomment'] bool. add a html comment including several debug messages to output + * - $a['lifetime'] int. lifetime in seconds 2 cache output + * - $a['cachedir'] string. directory where cached content is 2 store. + * - $a['cachegroup'] string. cache group, will be a subdirectory inside cachedir + * - $a['cacheprefix'] string. add prefix 2 stored filenames + * - $a['idoptions'] array. several variables 2 create a unique id, if the output depends + * on them. e. g. array('uri'=>$_SERVER['REQUEST_URI'],'post'=>$_POST,'get'=>$_GET); + * @param obj $db Reference 2 Contenido database object + * @param int $iCreateCode Flag of createcode state from table con_cat_art + */ + function cConCacheHandler($aConf, &$db, $iCreateCode=null) { + + // check if caching is allowed on contenido variable + if ($aConf['excludecontenido'] == true) { + if (isset($GLOBALS['contenido'])) { + // contenido variable exists, set state and get out here + $this->_bEnableCaching = false; + return; + } + } + + // set enable state of caching + if (is_bool($aConf['enable'])) { + $this->_bEnableCaching = $aConf['enable']; + } + if ($this->_bEnableCaching == false) { + return; + } + + // check if current article shouldn't be cached (by stese) + $sExcludeIdarts = getEffectiveSetting('cache', 'excludeidarts', false); + if ($sExcludeIdarts && strlen($sExcludeIdarts)>0) { + $sExcludeIdarts = preg_replace("/[^0-9,]/", '', $sExcludeIdarts); + $aExcludeIdart = explode(',', $sExcludeIdarts); + if (in_array($GLOBALS['idart'], $aExcludeIdart)) { + $this->_bEnableCaching = false; + return; + } + } + + $this->_oDB = $db; + + // set caching configuration + parent::cConCache($aConf['cachedir'], $aConf['cachegroup']); + $this->debug($aConf['debug']); + $this->htmlComment($aConf['htmlcomment']); + $this->lifetime($aConf['lifetime']); + $this->infoTemplate($aConf['infotemplate']); + foreach ($aConf['idoptions'] as $name => $var) { + $this->addOption($name, $var); + } + + if (is_array($aConf['raiseonevent'])) { + $this->_aEventCode = $aConf['raiseonevent']; + } + + // check, if code is to create + $this->_bEnableCaching = !$this->_isCode2Create($iCreateCode); + if ($this->_bEnableCaching == false) { + $this->removeFromCache(); + } + + } // function cConCacheHandler() + + + /** + * Checks, if the create code flag is set. Output will be loaded from cache, if no code is 2 create. + * It also checks the state of global variable $force. + * + * @param mixed $iCreateCode State of create code (0 or 1). The state will be loaded from database if value is "null" + * @return bool True if code is to create, otherwhise false. + * @access private + */ + function _isCode2Create($iCreateCode){ + if ($this->_bEnableCaching == false) { + return; + } + + // check content of global variable $force, get out if is's set to '1' + if (isset($GLOBALS['force']) && is_numeric($GLOBALS['force']) && $GLOBALS['force'] == 1) { + return true; + } + + if (is_null($iCreateCode)) { + // check if code is expired + + $oApiCatArtColl = new cApiCategoryArticleCollection('idart="'.$GLOBALS['idart'].'" AND idcat="'.$GLOBALS['idcat'].'"'); + if ($oApiCatArt = $oApiCatArtColl->next()) { + $iCreateCode = $oApiCatArt->get('createcode'); + unset($oApiCatArt); + } + unset($oApiCatArtColl); + } + + return ($iCreateCode == 1) ? true : false; + } // function _isCode2Create() + + +} // class cConCacheHandler + +?> \ No newline at end of file diff --git a/branches/php7/includes/class.input.helper.php b/branches/php7/includes/class.input.helper.php new file mode 100644 index 0000000..fc7b816 --- /dev/null +++ b/branches/php7/includes/class.input.helper.php @@ -0,0 +1,573 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: class.input.helper.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// Select box with additional functions for category and article selection +class cHTMLInputSelectElement extends cHTMLSelectElement +{ + /** + * Constructor. Creates an HTML select field (aka "DropDown"). + * + * @param string $sName Name of the element + * @param int $iWidth Width of the select element + * @param string $sID ID of the element + * @param string $bDisabled Item disabled flag (non-empty to set disabled) + * @param int $iTabIndex Tab index for form elements + * @param string $sAccesskey Key to access the field + * + * @return none + **/ + function cHTMLInputSelectElement ($sName, $iWidth = "", $sID = "", $bDisabled = false, $iTabIndex = null, $sAccessKey = "") + { + cHTMLSelectElement :: __construct($sName, $iWidth, $sID, $bDisabled, $iTabIndex, $sAccessKey); + } + + + /** + * Function addArticles. Adds articles to select box values. + * + * @param int $iIDCat idcat of the category to be listed + * @param bool $bColored Add color information to option elements + * @param bool $bArtOnline If true, only online articles will be added + * @param string $sSpaces Just some " " to show data hierarchically (used in conjunction with addCategories) + * + * @return int Number of items added + **/ + function addArticles ($iIDCat, $bColored = false, $bArtOnline = true, $sSpaces = "") + { + global $cfg, $lang; + + $oDB = new DB_Contenido; + + 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 "; + } + + $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); + + $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 ($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; + } + } + + /** + * 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_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 "; + + if ($iMaxLevel > 0) { + $sSQL .= "AND tblCatTree.level < '".Contenido_Security::escapeDB($iMaxLevel, $oDB)."' "; + } + $sSQL .= "ORDER BY tblCatTree.idtree"; + + $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"); + + 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); + + // 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); + + 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; + + $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 ($sTypeRange != "") { + $sSQL .= "AND tblContent.idtype IN (". Contenido_Security::escapeDB($sTypeRange, $oDB).") "; + } + + $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; + + $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')."'"; + + // 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; + } + } + + /** + * 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; + + function UI_Config_Table() + { + global $cfg; + + $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 setAddMultiSelJS($bEnabled = true) + { + $this->_bAddMultiSelJS = (bool)$bEnabled; + } + + function setWidth ($sWidth) + { + $this->_sWidth = $sWidth; + } + + function setPadding ($sPadding) + { + $this->_sPadding = $sPadding; + } + + function setBorder ($sBorder) + { + $this->_sBorder = $sBorder; + } + + function setBorderColor ($sBorderColor) + { + $this->_sBorderColor = $sBorderColor; + } + + function setSolidBorder ($bSolidBorder = true) + { + $this->_bSolidBorder = (bool)$bSolidBorder; + } + + function setCell ($sRow, $sCell, $sContent) + { + $this->_aCells[$sRow][$sCell] = $sContent; + $this->_aCellAlignment[$sRow][$sCell] = ""; + } + + function setCellAlignment ($sRow, $sCell, $sAlignment) + { + $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; + } + + function setCellVAlignment ($sRow, $sCell, $sAlignment) + { + $this->_aCellVAlignment[$sRow][$sCell] = $sAlignment; + } + + function setCellColspan ($sRow, $sCell, $iColSpan) + { + $this->_aCellColSpan[$sRow][$sCell] = $iColSpan; + } + + function setCellClass ($sRow, $sCell, $sClass) + { + $this->_aCellClass[$sRow][$sCell] = $sClass; + } + + function setRowBgColor ($sRow, $sColor) + { + $this->_aRowBgColor[$sRow] = $sColor; + } + + function setRowExtra ($sRow, $sExtra) + { + $this->_aRowExtra[$sRow] = $sExtra; + } + + function _addMultiSelJS() + { + // Trick: To save multiple selections in  '; + html += '
'; + + } else { + // Implied consent disclosure + html += scriptsDisclosure + settings.impliedDisclosureText + ' ' + settings.privacyPolicyLinkText + '.'; + html += '
'; + } + html += ''; + $('body').append(html); + + // Serve the disclosure, and be smarter about branching + var dp = settings.position.toLowerCase(); + if(dp != 'top' && dp!= 'bottom') { + dp = 'top'; + } + var opts = new Array(); + if(dp == 'top') { + opts['in'] = {'top':'0'}; + opts['out'] = {'top':'-300'}; + } else { + opts['in'] = {'bottom':'0'}; + opts['out'] = {'bottom':'-300'}; + } + + // Start animation + $('#cookiesdirective').animate(opts['in'], 1000, function() { + // Set event handlers depending on type of disclosure + if(settings.explicitConsent) { + // Explicit, need to check a box and click a button + $('#explicitsubmit').click(function() { + if($('#epdagree').is(':checked')) { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + location.reload(true); + }); + } else { + // We need the box checked we want "explicit consent", display message + $('#epdnotick').css('display', 'block'); + } + }); + } else { + // Implied consent, just a button to close it + $('#impliedsubmit').click(function() { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + }); + }); + } + + // Set a timer to remove the warning after 'settings.duration' seconds + setTimeout(function(){ + $('#cookiesdirective').animate({ + opacity:'0' + },2000, function(){ + $('#cookiesdirective').css(dp,'-300px'); + }); + }, settings.duration * 1000); + }); + } +})(jQuery); diff --git a/branches/php7/js/libs/jquery-1.9.0.min.js b/branches/php7/js/libs/jquery-1.9.0.min.js new file mode 100644 index 0000000..50d1b22 --- /dev/null +++ b/branches/php7/js/libs/jquery-1.9.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("