diff --git a/.gitignore b/.gitignore index c6c9917..e4e7eda 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ /conlite/plugins/pluginmanager/_src/ /.project /_api/ +/cl-releasetool/ /data/cache/edit_area_full_with_plugins.gz /data/cache/edit_area_full_with_plugins.js /data/config/production/config.local.php /cms/data/modules/up-download/ -/cl-releasetool/ diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..6762b78 --- /dev/null +++ b/.htaccess @@ -0,0 +1,61 @@ +################################################################################ +# ConLite AMR plugin simple rewrite rules set. +# +# Contains few easy to handle rewrite rules. +# +# @version 1.0.0 +# @author Ortwin Pinke +# @author Murat Purc +# @copyright 2019 ConLite Team +# @link http://www.conlite.org +# +# Versions before 1.0 copyright 4fb, author Murat Purc +# +# $Id: htaccess_simple.txt 145 2019-10-25 16:00:47Z oldperl $ +################################################################################ + +#SetEnv CONLITE_ENVIRONMENT development + + + + # Enable rewrite engine + RewriteEngine on + + # Specify a base URL-path for the rules + RewriteBase /cms + + # Catch some common exploits in query string to get rid of them + # NOTE: Conditions to prevent protocols (ftp, http[s]) in query string could + # be a disadvantage in some cases + RewriteCond %{QUERY_STRING} contenido_path=.*$ [NC,OR] + RewriteCond %{QUERY_STRING} cfg\[path\]=.*$ [NC,OR] + RewriteCond %{QUERY_STRING} _PHPLIB\[libdir\]=.*$ [NC,OR] + RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] + RewriteCond %{QUERY_STRING} ftp://.*$ [NC,OR] + RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC] + RewriteRule ^.* - [F,L] # all matching conditions from above will end in nirvana + + # Rewrite request to root to front_content.php + RewriteRule ^$ front_content.php [QSA,L] + + # Exclude following request from rewriting + # tests for favicon.ico, valid symlinks (-s), not empty files (-l) and folders (-d) + RewriteCond %{REQUEST_URI} ^/favicon.ico$ [OR] + RewriteCond %{REQUEST_FILENAME} -s [OR] + RewriteCond %{REQUEST_FILENAME} -l [OR] + RewriteCond %{REQUEST_FILENAME} -d + RewriteRule ^.*$ - [NC,L] + + # Pass other requests to front_content.php + RewriteRule ^.*$ front_content.php [QSA,NC,L] + + + +# Some rules to compress files. +# NOTE: Following settings are not mod rewrite specific, but enabling mod_deflate +# for some file types can help to reduce bandwith. + + + SetOutputFilter DEFLATE + + diff --git a/cms/includes/class.input.helper.php b/cms/includes/class.input.helper.php index aabdeae..bd0bc52 100644 --- a/cms/includes/class.input.helper.php +++ b/cms/includes/class.input.helper.php @@ -1,4 +1,5 @@ 0) - { - $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, "; - $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, "; - $sSQL .= "tblCatLang.startidartlang as idstartartlang "; - $sSQL .= "FROM ".$cfg["tab"]["art_lang"]." AS tblArtLang, ".$cfg["tab"]["cat_art"]." AS tblCatArt, "; - $sSQL .= $cfg["tab"]["cat_lang"]." AS tblCatLang "; - $sSQL .= "WHERE tblCatArt.idcat = '".Contenido_Security::toInteger($iIDCat)."' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND "; + if (is_numeric($iIDCat) && $iIDCat > 0) { + $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, "; + $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, "; + $sSQL .= "tblCatLang.startidartlang as idstartartlang "; + $sSQL .= "FROM " . $cfg["tab"]["art_lang"] . " AS tblArtLang, " . $cfg["tab"]["cat_art"] . " AS tblCatArt, "; + $sSQL .= $cfg["tab"]["cat_lang"] . " AS tblCatLang "; + $sSQL .= "WHERE tblCatArt.idcat = '" . Contenido_Security::toInteger($iIDCat) . "' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND "; - if ($bArtOnline) { - $sSQL .= "tblArtLang.online = '1' AND "; - } + if ($bArtOnline) { + $sSQL .= "tblArtLang.online = '1' AND "; + } - $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' "; - if ($cfg["is_start_compatible"] == true) { - $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article - } else { - $sSQL .= "ORDER BY tblArtLang.title"; - } + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' "; + if ($cfg["is_start_compatible"] == true) { + $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article + } else { + $sSQL .= "ORDER BY tblArtLang.title"; + } - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return 0; - } else { - $iCounter = count($this->_options); - while ($oDB->next_record()) - { - // Generate new option element - $oOption = new cHTMLOptionElement($sSpaces."   ".substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart")); + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return 0; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) { + // Generate new option element + $oOption = new cHTMLOptionElement($sSpaces . "   " . substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart")); - if ($bColored) - { - $bIsStartArticle = false; - if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) { - // Compatible mode and "start article" flag is set - $bIsStartArticle = true; - } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) { - // No compatible mode and current article is start article (idstartartlang is the same for all records within a category) - $bIsStartArticle = true; - } + if ($bColored) { + $bIsStartArticle = false; + if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) { + // Compatible mode and "start article" flag is set + $bIsStartArticle = true; + } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) { + // No compatible mode and current article is start article (idstartartlang is the same for all records within a category) + $bIsStartArticle = true; + } - if ($bIsStartArticle) - { - if ($oDB->f("online") == 0) { - // Start article, but offline -> red - $oOption->setStyle("color: #ff0000;"); - } else { - // Start article -> blue - $oOption->setStyle("color: #0000ff;"); - } - } else if ($oDB->f("online") == 0) { - // Offline article -> grey - $oOption->setStyle("color: #666666;"); - } - } + if ($bIsStartArticle) { + if ($oDB->f("online") == 0) { + // Start article, but offline -> red + $oOption->setStyle("color: #ff0000;"); + } else { + // Start article -> blue + $oOption->setStyle("color: #0000ff;"); + } + } else if ($oDB->f("online") == 0) { + // Offline article -> grey + $oOption->setStyle("color: #666666;"); + } + } - // Add option element to the list - $this->addOptionElement($iCounter, $oOption); - $iCounter++; - } - return $iCount; - } - } else { - return 0; - } - } + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); + $iCounter++; + } + return $iCount; + } + } else { + return 0; + } + } - /** - * Function addCategories. Adds category elements (optionally including articles) to select box values. - * Note: Using "with articles" adds the articles also - but the categories will get a negative value! - * There is no way to distinguish between a category id and an article id... - * - * @param int $iMaxLevel Max. level shown (to be exact: except this level) - * @param bool $bColored Add color information to option elements - * @param bool $bCatVisible If true, only add idcat as value, if cat is visible - * @param bool $bCatPublic If true, only add idcat as value, if cat is public - * @param bool $bWithArt Add also articles per category - * @param bool $bArtOnline If true, show only online articles - * - * @return int Number of items added - **/ - function addCategories ($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true, - $bWithArt = false, $bArtOnline = true) - { - global $cfg, $client, $lang; + /** + * Function addCategories. Adds category elements (optionally including articles) to select box values. + * Note: Using "with articles" adds the articles also - but the categories will get a negative value! + * There is no way to distinguish between a category id and an article id... + * + * @param int $iMaxLevel Max. level shown (to be exact: except this level) + * @param bool $bColored Add color information to option elements + * @param bool $bCatVisible If true, only add idcat as value, if cat is visible + * @param bool $bCatPublic If true, only add idcat as value, if cat is public + * @param bool $bWithArt Add also articles per category + * @param bool $bArtOnline If true, show only online articles + * + * @return int Number of items added + * */ + function addCategories($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true, + $bWithArt = false, $bArtOnline = true) { + global $cfg, $client, $lang; - $oDB = new DB_Contenido; + $oDB = new DB_Contenido; - $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, "; - $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level "; - $sSQL .= "FROM ".$cfg["tab"]["cat"]." AS tblCat, ".$cfg["tab"]["cat_lang"]." AS tblCatLang, "; - $sSQL .= $cfg["tab"]["cat_tree"]." AS tblCatTree "; - $sSQL .= "WHERE tblCat.idclient = '".Contenido_Security::escapeDB($client, $oDB)."' AND tblCatLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' AND "; - $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; + $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, "; + $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level "; + $sSQL .= "FROM " . $cfg["tab"]["cat"] . " AS tblCat, " . $cfg["tab"]["cat_lang"] . " AS tblCatLang, "; + $sSQL .= $cfg["tab"]["cat_tree"] . " AS tblCatTree "; + $sSQL .= "WHERE tblCat.idclient = '" . Contenido_Security::escapeDB($client, $oDB) . "' AND tblCatLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' AND "; + $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; - if ($iMaxLevel > 0) { - $sSQL .= "AND tblCatTree.level < '".Contenido_Security::escapeDB($iMaxLevel, $oDB)."' "; - } - $sSQL .= "ORDER BY tblCatTree.idtree"; + if ($iMaxLevel > 0) { + $sSQL .= "AND tblCatTree.level < '" . Contenido_Security::escapeDB($iMaxLevel, $oDB) . "' "; + } + $sSQL .= "ORDER BY tblCatTree.idtree"; - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return false; - } else { - $iCounter = count($this->_options); - while ($oDB->next_record()) - { - $sSpaces = ""; - $sStyle = ""; - $iID = $oDB->f("idcat"); + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) { + $sSpaces = ""; + $sStyle = ""; + $iID = $oDB->f("idcat"); - for ($i = 0; $i < $oDB->f("level"); $i++) { - $sSpaces .= "   "; - } + for ($i = 0; $i < $oDB->f("level"); $i++) { + $sSpaces .= "   "; + } - // Generate new option element - if (($bCatVisible && $oDB->f("visible") == 0) || - ($bCatPublic && $oDB->f("public") == 0)) { - // If category has to be visible or public and it isn't, don't add value - $sValue = ""; - } else if ($bWithArt) { - // If article will be added, set negative idcat as value - $sValue = "-".$iID; - } else { - // Show only categories - and everything is fine... - $sValue = $iID; - } - $oOption = new cHTMLOptionElement($sSpaces."> ".urldecode($oDB->f("name")), $sValue); + // Generate new option element + if (($bCatVisible && $oDB->f("visible") == 0) || ($bCatPublic && $oDB->f("public") == 0)) { + // If category has to be visible or public and it isn't, don't add value + $sValue = ""; + } else if ($bWithArt) { + // If article will be added, set negative idcat as value + $sValue = "-" . $iID; + } else { + // Show only categories - and everything is fine... + $sValue = $iID; + } + $oOption = new cHTMLOptionElement($sSpaces . "> " . urldecode($oDB->f("name")), $sValue); - // Coloring option element, restricted shows grey color - $oOption->setStyle("background-color: #EFEFEF"); - if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) { - $oOption->setStyle("color: #666666;"); - } + // Coloring option element, restricted shows grey color + $oOption->setStyle("background-color: #EFEFEF"); + if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) { + $oOption->setStyle("color: #666666;"); + } - // Add option element to the list - $this->addOptionElement($iCounter, $oOption); + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); - if ($bWithArt) { - $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces); - $iCount += $iArticles; - } - $iCounter = count($this->_options); - } - } - return $iCount; - } + if ($bWithArt) { + $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces); + $iCount += $iArticles; + } + $iCounter = count($this->_options); + } + } + return $iCount; + } - /** - * Function addTypesFromArt. Adds types and type ids which are available for the specified article - * - * @param int $iIDCatArt Article id - * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28') - * - * @return int Number of items added - **/ - function addTypesFromArt ($iIDCatArt, $sTypeRange = "") - { - global $cfg, $lang; + /** + * Function addTypesFromArt. Adds types and type ids which are available for the specified article + * + * @param int $iIDCatArt Article id + * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28') + * + * @return int Number of items added + * */ + function addTypesFromArt($iIDCatArt, $sTypeRange = "") { + global $cfg, $lang; - $oDB = new DB_Contenido; + $oDB = new DB_Contenido; - if (is_numeric($iIDCatArt) && $iIDCatArt > 0) - { - $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, "; - $sSQL .= "tblContent.value AS value "; - $sSQL .= "FROM ".$cfg["tab"]["content"]." AS tblContent, ".$cfg["tab"]["art_lang"]." AS tblArtLang, "; - $sSQL .= $cfg["tab"]["cat_art"]." AS tblCatArt, ".$cfg["tab"]["type"]." AS tblType "; - $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND "; - $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '". Contenido_Security::escapeDB($lang, $oDB)."' AND tblCatArt.idcatart = '". Contenido_Security::toInteger($iIDCatArt)."' "; + if (is_numeric($iIDCatArt) && $iIDCatArt > 0) { + $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, "; + $sSQL .= "tblContent.value AS value "; + $sSQL .= "FROM " . $cfg["tab"]["content"] . " AS tblContent, " . $cfg["tab"]["art_lang"] . " AS tblArtLang, "; + $sSQL .= $cfg["tab"]["cat_art"] . " AS tblCatArt, " . $cfg["tab"]["type"] . " AS tblType "; + $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND "; + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '" . Contenido_Security::escapeDB($lang, $oDB) . "' AND tblCatArt.idcatart = '" . Contenido_Security::toInteger($iIDCatArt) . "' "; - if ($sTypeRange != "") { - $sSQL .= "AND tblContent.idtype IN (". Contenido_Security::escapeDB($sTypeRange, $oDB).") "; - } + if ($sTypeRange != "") { + $sSQL .= "AND tblContent.idtype IN (" . Contenido_Security::escapeDB($sTypeRange, $oDB) . ") "; + } - $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; + $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; - $oDB->query($sSQL); + $oDB->query($sSQL); - $iCount = $oDB->num_rows(); - if ($iCount == 0) { - return false; - } else { - while ($oDB->next_record()) - { - $sTypeIdentifier = "tblData.idtype = '".$oDB->f('idtype')."' AND tblData.typeid = '".$oDB->f('typeid')."'"; + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + while ($oDB->next_record()) { + $sTypeIdentifier = "tblData.idtype = '" . $oDB->f('idtype') . "' AND tblData.typeid = '" . $oDB->f('typeid') . "'"; - // Generate new option element - $oOption = new cHTMLOptionElement($oDB->f('type')."[".$oDB->f('typeid')."]: ".substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier); + // Generate new option element + $oOption = new cHTMLOptionElement($oDB->f('type') . "[" . $oDB->f('typeid') . "]: " . substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier); - // Add option element to the list - $this->addOptionElement($sTypeIdentifier, $oOption); - } - return $iCount; - } - } else { - return false; - } - } + // Add option element to the list + $this->addOptionElement($sTypeIdentifier, $oOption); + } + return $iCount; + } + } else { + return false; + } + } + + /** + * Selects specified elements as selected + * + * @param array $aElements Array with "values" of the cHTMLOptionElement to set + * + * @return none + */ + function setSelected($aElements) { + if (is_array($this->_options) && is_array($aElements)) { + foreach ($this->_options as $sKey => $oOption) { + if (in_array($oOption->getAttribute("value"), $aElements)) { + $oOption->setSelected(true); + $this->_options[$sKey] = $oOption; + } else { + $oOption->setSelected(false); + $this->_options[$sKey] = $oOption; + } + } + } + } - /** - * Selects specified elements as selected - * - * @param array $aElements Array with "values" of the cHTMLOptionElement to set - * - * @return none - */ - function setSelected($aElements) - { - if (is_array($this->_options) && is_array($aElements)) - { - foreach ($this->_options as $sKey => $oOption) - { - if (in_array($oOption->getAttribute("value"), $aElements)) - { - $oOption->setSelected(true); - $this->_options[$sKey] = $oOption; - } else { - $oOption->setSelected(false); - $this->_options[$sKey] = $oOption; - } - } - } - } } -class UI_Config_Table -{ - var $_sTplCellCode; - var $_sTplTableFile; - - var $_sWidth; - var $_sBorder; - var $_sBorderColor; - var $_bSolidBorder; - var $_sPadding; - var $_aCells; - var $_aCellAlignment; - var $_aCellVAlignment; - var $_aCellColSpan; - var $_aCellClass; - var $_aRowBgColor; - var $_aRowExtra; - var $_bAddMultiSelJS; - - var $_sColorLight; - var $_sColorDark; +class UI_Config_Table { - function __construct() - { - global $cfg; + var $_sTplCellCode; + var $_sTplTableFile; + var $_sWidth; + var $_sBorder; + var $_sBorderColor; + var $_bSolidBorder; + var $_sPadding; + var $_aCells; + var $_aCellAlignment; + var $_aCellVAlignment; + var $_aCellColSpan; + var $_aCellClass; + var $_aRowBgColor; + var $_aRowExtra; + var $_bAddMultiSelJS; + var $_sColorLight; + var $_sColorDark; - $this->_sPadding = 2; - $this->_sBorder = 0; - $this->_sBorderColor = $cfg['color']['table_border']; - $this->_sTplCellCode = ' {CONTENT}'."\n"; - $this->_sTplTableFile = $cfg['path']['contenido'].$cfg['path']['templates'].$cfg['templates']['generic_list']; - $this->_sColorLight = $cfg['color']['table_light']; - $this->_sColorDark = $cfg['color']['table_dark']; - } + function __construct() { + global $cfg; - function setCellTemplate($sCode) - { - $this->_sTplCellCode = $sCode; - } + $this->_sPadding = 2; + $this->_sBorder = 0; + $this->_sBorderColor = $cfg['color']['table_border']; + $this->_sTplCellCode = ' {CONTENT}' . "\n"; + $this->_sTplTableFile = $cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_list']; + $this->_sColorLight = $cfg['color']['table_light']; + $this->_sColorDark = $cfg['color']['table_dark']; + } + function setCellTemplate($sCode) { + $this->_sTplCellCode = $sCode; + } - function setTableTemplateFile($sPath) - { - $this->_sTplTableFile = $sPath; - } - - function setLightColor($sColor) - { - $this->_sColorLight = $sColor; - } - - function setDarkColor($sColor) - { - $this->_sColorDark = $sColor; - } + function setTableTemplateFile($sPath) { + $this->_sTplTableFile = $sPath; + } - function setAddMultiSelJS($bEnabled = true) - { - $this->_bAddMultiSelJS = (bool)$bEnabled; - } + function setLightColor($sColor) { + $this->_sColorLight = $sColor; + } - function setWidth ($sWidth) - { - $this->_sWidth = $sWidth; - } - - function setPadding ($sPadding) - { - $this->_sPadding = $sPadding; - } + function setDarkColor($sColor) { + $this->_sColorDark = $sColor; + } - function setBorder ($sBorder) - { - $this->_sBorder = $sBorder; - } + function setAddMultiSelJS($bEnabled = true) { + $this->_bAddMultiSelJS = (bool) $bEnabled; + } - function setBorderColor ($sBorderColor) - { - $this->_sBorderColor = $sBorderColor; - } - - function setSolidBorder ($bSolidBorder = true) - { - $this->_bSolidBorder = (bool)$bSolidBorder; - } + function setWidth($sWidth) { + $this->_sWidth = $sWidth; + } - function setCell ($sRow, $sCell, $sContent) - { - $this->_aCells[$sRow][$sCell] = $sContent; - $this->_aCellAlignment[$sRow][$sCell] = ""; - } + function setPadding($sPadding) { + $this->_sPadding = $sPadding; + } - function setCellAlignment ($sRow, $sCell, $sAlignment) - { - $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; - } + function setBorder($sBorder) { + $this->_sBorder = $sBorder; + } - function setCellVAlignment ($sRow, $sCell, $sAlignment) - { - $this->_aCellVAlignment[$sRow][$sCell] = $sAlignment; - } + function setBorderColor($sBorderColor) { + $this->_sBorderColor = $sBorderColor; + } - function setCellColspan ($sRow, $sCell, $iColSpan) - { - $this->_aCellColSpan[$sRow][$sCell] = $iColSpan; - } + function setSolidBorder($bSolidBorder = true) { + $this->_bSolidBorder = (bool) $bSolidBorder; + } - function setCellClass ($sRow, $sCell, $sClass) - { - $this->_aCellClass[$sRow][$sCell] = $sClass; - } + function setCell($sRow, $sCell, $sContent) { + $this->_aCells[$sRow][$sCell] = $sContent; + $this->_aCellAlignment[$sRow][$sCell] = ""; + } - function setRowBgColor ($sRow, $sColor) - { - $this->_aRowBgColor[$sRow] = $sColor; - } - - function setRowExtra ($sRow, $sExtra) - { - $this->_aRowExtra[$sRow] = $sExtra; - } + function setCellAlignment($sRow, $sCell, $sAlignment) { + $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; + } - function _addMultiSelJS() - { - // Trick: To save multiple selections in -Element, add some JS which saves the + // selection, comma separated in a hidden input field on change. + // Try ... catch prevents error messages, if function is added more than once + // if (!fncUpdateSel) in JS has not worked... - if ($this->_bSolidBorder) - { - if ($iCount < count($aCells)) - { - if ($iColCount < count($this->_aCells)) { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } else { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } - } else if ($iColCount < count($this->_aCells)) { - $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell); - } else { - $sTplCell = str_replace('{EXTRA}', '', $sTplCell); - } - } - - if ($this->_aCellAlignment[$sRow][$sCell] != "") { - $sTplCell = str_replace('{ALIGN}', $this->_aCellAlignment[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{ALIGN}', 'left', $sTplCell); - } - - if ($this->_aCellVAlignment[$sRow][$sCell] != "") { - $sTplCell = str_replace('{VALIGN}', $this->_aCellVAlignment[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{VALIGN}', 'top', $sTplCell); - } + $sSkript = ' ' . "\n"; - if ($this->_aCellColSpan[$sRow][$sCell] != "") { - $sTplCell = str_replace('{COLSPAN}', $this->_aCellColSpan[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{COLSPAN}', '1', $sTplCell); - } + return $sSkript; + } - if ($this->_aCellClass[$sRow][$sCell] != "") { - $sTplCell = str_replace('{CLASS}', $this->_aCellClass[$sRow][$sCell], $sTplCell); - } else { - $sTplCell = str_replace('{CLASS}', 'text', $sTplCell); - } + function render($bPrint = false) { + $oTable = new Template; + $oTable->reset(); - // Multi selection javascript - if ($this->_bAddMultiSelJS) { - $sData = $this->_addMultiSelJS() . $sData; - $this->_bAddMultiSelJS = false; - } + $oTable->set('s', 'CELLPADDING', $this->_sPadding); + $oTable->set('s', 'BORDER', $this->_sBorder); + $oTable->set('s', 'BORDERCOLOR', $this->_sBorderColor); + + $iColCount = 0; + $bDark = false; + $sBgColor = ""; + $bMultiSelJSAdded = false; + if (is_array($this->_aCells)) { + foreach ($this->_aCells as $sRow => $aCells) { + $iColCount++; + //$bDark = !$bDark; + $sLine = ""; + $iCount = 0; + + foreach ($aCells as $sCell => $sData) { + $iCount++; + $sTplCell = $this->_sTplCellCode; + + if ($this->_bSolidBorder) { + if ($iCount < count($aCells)) { + if ($iColCount < count($this->_aCells)) { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-bottom: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } else { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } + } else if ($iColCount < count($this->_aCells)) { + $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-bottom: 1px; border-color: ' . $this->_sBorderColor . '; border-style: solid;', $sTplCell); + } else { + $sTplCell = str_replace('{EXTRA}', '', $sTplCell); + } + } + + if ($this->_aCellAlignment[$sRow][$sCell] != "") { + $sTplCell = str_replace('{ALIGN}', $this->_aCellAlignment[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{ALIGN}', 'left', $sTplCell); + } + + if ($this->_aCellVAlignment[$sRow][$sCell] != "") { + $sTplCell = str_replace('{VALIGN}', $this->_aCellVAlignment[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{VALIGN}', 'top', $sTplCell); + } + + if ($this->_aCellColSpan[$sRow][$sCell] != "") { + $sTplCell = str_replace('{COLSPAN}', $this->_aCellColSpan[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{COLSPAN}', '1', $sTplCell); + } + + if ($this->_aCellClass[$sRow][$sCell] != "") { + $sTplCell = str_replace('{CLASS}', $this->_aCellClass[$sRow][$sCell], $sTplCell); + } else { + $sTplCell = str_replace('{CLASS}', 'text', $sTplCell); + } + + // Multi selection javascript + if ($this->_bAddMultiSelJS) { + $sData = $this->_addMultiSelJS() . $sData; + $this->_bAddMultiSelJS = false; + } + + $sTplCell = str_replace('{CONTENT}', $sData, $sTplCell); + $sLine .= $sTplCell; + } + + // Row + $oTable->set('d', 'ROWS', $sLine); + + if ($this->_aRowBgColor[$sRow] != "") { + $sBgColor = $this->_aRowBgColor[$sRow]; + } else if ($sBgColor == $this->_sColorLight) { + $sBgColor = $this->_sColorDark; + } else { + $sBgColor = $this->_sColorLight; + } + $oTable->set('d', 'BGCOLOR', $sBgColor); + + if ($this->_aRowExtra[$sRow] != "") { + $oTable->set('d', 'EXTRA', $this->_aRowExtra[$sRow]); + } else { + $oTable->set('d', 'EXTRA', ''); + } + + $oTable->next(); + } + } + + if ($this->_sWidth) { + // Table: Width + $oTable->set('s', 'EXTRA', 'width: ' . $this->_sWidth . ';'); + } else { + $oTable->set('s', 'EXTRA', ''); + } + $sRendered = $oTable->generate($this->_sTplTableFile, true, false); + + if ($bPrint == true) { + echo $sRendered; + } else { + return $sRendered; + } + } - $sTplCell = str_replace('{CONTENT}', $sData, $sTplCell); - $sLine .= $sTplCell; - } - - // Row - $oTable->set('d', 'ROWS', $sLine); - - if ($this->_aRowBgColor[$sRow] != "") { - $sBgColor = $this->_aRowBgColor[$sRow]; - } else if ($sBgColor == $this->_sColorLight) { - $sBgColor = $this->_sColorDark; - } else { - $sBgColor = $this->_sColorLight; - } - $oTable->set('d', 'BGCOLOR', $sBgColor); - - if ($this->_aRowExtra[$sRow] != "") { - $oTable->set('d', 'EXTRA', $this->_aRowExtra[$sRow]); - } else { - $oTable->set('d', 'EXTRA', ''); - } - - $oTable->next(); - } - } - - if ($this->_sWidth) { - // Table: Width - $oTable->set('s', 'EXTRA', 'width: '.$this->_sWidth.';'); - } else { - $oTable->set('s', 'EXTRA', ''); - } - $sRendered = $oTable->generate($this->_sTplTableFile, true, false); - - if ($bPrint == true) { - echo $sRendered; - } else { - return $sRendered; - } - } } + ?> \ No newline at end of file diff --git a/setup/lib/defines.php b/setup/lib/defines.php index 192ca28..d99880a 100644 --- a/setup/lib/defines.php +++ b/setup/lib/defines.php @@ -1,10 +1,8 @@ = 7.0.0 to install ConLite 2.1. Sorry, even the setup doesn't work otherwise. Your version: " . PHP_VERSION . "\n"); + die("You need PHP >= " . C_SETUP_MIN_PHP_VERSION . " to install ConLite " . C_SETUP_VERSION . ". Sorry, even the setup doesn't work otherwise. Your version: " . PHP_VERSION . "\n"); } -// Check version -//PHP >= 7.0.0 and < 7.4 -if (version_compare(PHP_VERSION, C_SETUP_MAX_PHP_VERSION, '>=')) { - die("You need PHP >= 7.0 and < 7.4 to install ConLite 2.1. Sorry, even the setup doesn't work otherwise. Your version: " . PHP_VERSION . "\n"); +$iVersionMax = substr(C_SETUP_MAX_PHP_VERSION, 0, strrpos(C_SETUP_MAX_PHP_VERSION, ".") + 1) . (1 + substr(C_SETUP_MAX_PHP_VERSION, strrpos(C_SETUP_MAX_PHP_VERSION, ".") + 1)); + +if (!(version_compare($iVersionMax, PHP_VERSION, ">") && version_compare(C_SETUP_MAX_PHP_VERSION, PHP_VERSION, "<="))) { + die("You need PHP >= " . C_SETUP_MIN_PHP_VERSION . " and <= " . C_SETUP_MAX_PHP_VERSION . " to install ConLite " . C_SETUP_VERSION . ". Sorry, even the setup doesn't work otherwise. Your version: " . PHP_VERSION . "\n"); } @@ -44,7 +46,7 @@ if (version_compare(PHP_VERSION, C_SETUP_MAX_PHP_VERSION, '>=')) { * If you want to set a different enviroment value please define it in your .htaccess file * or in the server configuration. * - * SetEnv CONTENIDO_ENVIRONMENT development + * SetEnv CONLITE_ENVIRONMENT development */ if (!defined('CL_ENVIRONMENT')) { if (getenv('CONLITE_ENVIRONMENT')) { @@ -71,13 +73,13 @@ Contenido_Security::checkRequests(); */ function checkAndInclude($filename) { if (file_exists($filename) && is_readable($filename)) { - require_once($filename); + require_once($filename); } else { - echo "
";
-            echo "Setup was unable to include neccessary files. The file $filename was not found. Solutions:\n\n";
-            echo "- Make sure that all files are correctly uploaded to the server.\n";
-            echo "- Make sure that include_path is set to '.' (of course, it can contain also other directories). Your include path is: ".ini_get("include_path")."\n"; 
-            echo "
"; + echo "
";
+        echo "Setup was unable to include neccessary files. The file $filename was not found. Solutions:\n\n";
+        echo "- Make sure that all files are correctly uploaded to the server.\n";
+        echo "- Make sure that include_path is set to '.' (of course, it can contain also other directories). Your include path is: " . ini_get("include_path") . "\n";
+        echo "
"; } } @@ -88,6 +90,10 @@ $cfg['path']['frontend'] = CON_FRONTEND_PATH; $cfg['path']['conlite'] = $cfg['path']['frontend'] . '/conlite/'; $cfg['path']['conlite_config'] = CON_FRONTEND_PATH . '/data/config/' . CL_ENVIRONMENT . '/'; +if(!is_dir($cfg['path']['conlite_config'])) { + die("Setup cannot find the config folder \"".$cfg['path']['conlite_config']."\"! Make shure folder exists and is readable."); +} + // (bool) Flag to use native i18n. // Note: Enabling this could create unwanted side effects, because of // native gettext() behavior. @@ -96,8 +102,8 @@ $cfg['native_i18n'] = false; session_start(); // includes -//checkAndInclude('lib/defines.php'); -checkAndInclude($cfg['path']['frontend'].'/pear/HTML/Common2.php'); +checkAndInclude('lib/defines.php'); +checkAndInclude($cfg['path']['frontend'] . '/pear/HTML/Common2.php'); checkAndInclude($cfg['path']['conlite'] . 'classes/cHTML5/class.chtml.php'); checkAndInclude($cfg['path']['conlite'] . 'classes/class.htmlelements.php'); checkAndInclude($cfg['path']['conlite'] . 'classes/con2con/class.filehandler.php');