ConLite/conlite/includes/functions.tpl.php

783 Zeilen
26 KiB
PHP

<?php
/**
* Project:
* Contenido Content Management System
*
* Description:
* Define the Template related functions
*
* Requirements:
* @con_php_req 5.0
*
*
* @package Contenido Backend includes
* @version 1.0.1
* @author Olaf Niemann
* @copyright four for business AG <www.4fb.de>
* @license http://www.contenido.org/license/LIZENZ.txt
* @link http://www.4fb.de
* @link http://www.contenido.org
* @since file available since contenido release <= 4.6
*
* {@internal
* created 2003-01-21
* modified 2008-06-26, Frederic Schneider, add security fix
* modified 2008-06-30 timo.trautmann added fix module settings were also copied in function tplDuplicateTemplate
* modified 2009-01-08, Timo Trautmann fixed bug: Changes in Head Containers in visualedit were not stored
*
* $Id$:
* }}
*
*/
if (!defined('CON_FRAMEWORK')) {
die('Illegal call');
}
cInclude("includes", "functions.con.php");
/**
* Edit or create a new Template
*
* @author Olaf Niemann <Olaf.Niemann@4fb.de>
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.de>
*/
function tplEditTemplate($changelayout, $idtpl, $name, $description, $idlay, $c, $default) {
global $db;
global $sess;
global $auth;
global $client;
global $cfg;
global $area_tree;
global $perm;
$db2 = new DB_ConLite;
$date = date("YmdHis");
$author = "" . $auth->auth["uname"] . "";
//******** entry in 'tpl'-table ***************
//set_magic_quotes_gpc($name);
//set_magic_quotes_gpc($description);
if (!$idtpl) {
$idtpl = $db->nextid($cfg["tab"]["tpl"]);
$idtplcfg = $db->nextid($cfg["tab"]["tpl_conf"]);
/* Insert new entry in the
Template Conf table */
$sql = "INSERT INTO " . $cfg["tab"]["tpl_conf"] . "
(idtplcfg, idtpl, author) VALUES
('" . Contenido_Security::toInteger($idtplcfg) . "', '" . Contenido_Security::toInteger($idtpl) . "', '" . Contenido_Security::escapeDB($auth->auth["uname"], $db) . "')";
$db->query($sql);
/* Insert new entry in the
Template table */
$sql = "INSERT INTO " . $cfg["tab"]["tpl"] . "
(idtpl, idtplcfg, name, description, deletable, idlay, idclient, author, created, lastmodified) VALUES
('" . Contenido_Security::toInteger($idtpl) . "', '" . Contenido_Security::toInteger($idtplcfg) . "', '" . Contenido_Security::escapeDB($name, $db) . "', '" . Contenido_Security::escapeDB($description, $db) . "',
'1', '" . Contenido_Security::toInteger($idlay) . "', '" . Contenido_Security::toInteger($client) . "', '" . Contenido_Security::escapeDB($author, $db) . "', '" . Contenido_Security::escapeDB($date, $db) . "',
'" . Contenido_Security::escapeDB($date, $db) . "')";
$db->query($sql);
// set correct rights for element
cInclude("includes", "functions.rights.php");
createRightsForElement("tpl", $idtpl);
} else {
/* Update */
$sql = "UPDATE " . $cfg["tab"]["tpl"] . " SET name='" . Contenido_Security::escapeDB($name, $db) . "', description='" . Contenido_Security::escapeDB($description, $db) . "', idlay='" . Contenido_Security::toInteger($idlay) . "',
author='" . Contenido_Security::escapeDB($author, $db) . "', lastmodified='" . Contenido_Security::escapeDB($date, $db) . "' WHERE idtpl='" . Contenido_Security::toInteger($idtpl) . "'";
$db->query($sql);
if (is_array($c)) {
/* Delete all container assigned to this template */
$sql = "DELETE FROM " . $cfg["tab"]["container"] . " WHERE idtpl='" . Contenido_Security::toInteger($idtpl, $db) . "'";
$db->query($sql);
foreach ($c as $idcontainer => $dummyval) {
$sql = "INSERT INTO " . $cfg["tab"]["container"] . " (idcontainer, idtpl, number, idmod) VALUES ";
$sql .= "(";
$sql .= "'" . Contenido_Security::toInteger($db->nextid($cfg["tab"]["container"])) . "', ";
$sql .= "'" . Contenido_Security::toInteger($idtpl) . "', ";
$sql .= "'" . Contenido_Security::toInteger($idcontainer) . "', ";
$sql .= "'" . Contenido_Security::toInteger($c[$idcontainer]) . "'";
$sql .= ") ";
$db->query($sql);
}
}
/* Generate code */
conGenerateCodeForAllartsUsingTemplate($idtpl);
}
if ($default == 1) {
$sql = "UPDATE " . $cfg["tab"]["tpl"] . " SET defaulttemplate = '0' WHERE idclient = '" . Contenido_Security::toInteger($client) . "'";
$db->query($sql);
$sql = "UPDATE " . $cfg["tab"]["tpl"] . " SET defaulttemplate = '1' WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "' AND idclient = '" . Contenido_Security::toInteger($client) . "'";
$db->query($sql);
} else {
$sql = "UPDATE " . $cfg["tab"]["tpl"] . " SET defaulttemplate = '0' WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "' AND idclient = '" . Contenido_Security::toInteger($client) . "'";
$db->query($sql);
}
//******** if layout is changed stay at 'tpl_edit' otherwise go to 'tpl'
if ($changelayout != 1) {
$url = $sess->url("main.php?area=tpl_edit&idtpl=$idtpl&frame=4");
header("location: $url");
}
return $idtpl;
}
/**
* Delete a template
*
* @param int $idtpl ID of the template to duplicate
*
* @return $new_idtpl ID of the duplicated template
* @author Olaf Niemann <Olaf.Niemann@4fb.de>
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.>
*/
function tplDeleteTemplate($idtpl) {
global $db, $client, $lang, $cfg, $area_tree, $perm;
$sql = "DELETE FROM " . $cfg["tab"]["tpl"] . " WHERE idtpl='" . Contenido_Security::toInteger($idtpl) . "'";
$db->query($sql);
/* JL 160603 : Delete all unnecessary entries */
$sql = "DELETE FROM " . $cfg["tab"]["container"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'";
$db->query($sql);
$idsToDelete = array();
$sql = "SELECT idtplcfg FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'";
$db->query($sql);
while ($db->next_record()) {
$idsToDelete[] = $db->f("idtplcfg");
}
foreach ($idsToDelete as $id) {
$sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($id) . "'";
$db->query($sql);
$sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($id) . "'";
$db->query($sql);
}
cInclude("includes", "functions.rights.php");
deleteRightsForElement("tpl", $idtpl);
}
/**
* Browse a specific layout for containers
*
* @param int $idtpl Layout number to browse
*
* @return string &-seperated String of all containers
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.>
*/
function tplBrowseLayoutForContainers($idlay, $raw_code = NULL) {
global $db;
global $cfg;
global $containerinf;
if (is_null($raw_code) || empty($raw_code)) {
$sql = "SELECT code FROM " . $cfg["tab"]["lay"] . " WHERE idlay='" . Contenido_Security::toInteger($idlay) . "'";
$db->query($sql);
$db->next_record();
$code = $db->f("code");
} else {
$code = $raw_code;
}
preg_match_all("/CMS_CONTAINER\[([0-9]*)\]/", $code, $a_container);
$iPosBody = stripos($code, '<body>');
$sCodeBeforeHeader = substr($code, 0, $iPosBody);
if (!empty($a_container)) {
foreach ($a_container[1] as $value) {
if (preg_match("/CMS_CONTAINER\[$value\]/", $sCodeBeforeHeader)) {
$containerinf[$idlay][$value]["is_body"] = false;
} else {
$containerinf[$idlay][$value]["is_body"] = true;
}
}
}
if (is_array($containerinf[$idlay])) {
foreach ($containerinf[$idlay] as $key => $value) {
$a_container[1][] = $key;
}
}
$container = Array();
foreach ($a_container[1] as $value) {
if (!in_array($value, $container)) {
$container[] = $value;
}
}
asort($container);
if (is_array($container) && !empty($container)) {
$tmp_returnstring = implode("&", $container);
} else {
$tmp_returnstring = "";
}
return $tmp_returnstring;
}
/**
* Retrieve the container name
*
* @param int $idtpl Layout number to browse
* @param int $container Container number
*
* @return string Container name
*/
function tplGetContainerName($idlay, $container) {
global $db;
global $cfg;
global $containerinf;
if (is_array($containerinf[$idlay])) {
if (array_key_exists($container, $containerinf[$idlay])) {
return $containerinf[$idlay][$container]["name"];
}
}
}
/**
* Retrieve the container mode
*
* @param int $idtpl Layout number to browse
* @param int $container Container number
*
* @return string Container name
*/
function tplGetContainerMode($idlay, $container) {
global $db;
global $cfg;
global $containerinf;
if (is_array($containerinf[$idlay])) {
if (array_key_exists($container, $containerinf[$idlay])) {
return $containerinf[$idlay][$container]["mode"];
}
}
}
/**
* Retrieve the allowed container types
*
* @param int $idtpl Layout number to browse
* @param int $container Container number
*
* @return array Allowed container types
*/
function tplGetContainerTypes($idlay, $container) {
global $db;
global $cfg;
global $containerinf;
$list = array();
if (is_array($containerinf[$idlay])) {
if (array_key_exists($container, $containerinf[$idlay])) {
if ($containerinf[$idlay][$container]["types"] != "") {
$list = explode(",", $containerinf[$idlay][$container]["types"]);
foreach ($list as $key => $value) {
$list[$key] = trim($value);
}
}
}
}
return $list;
}
/**
* Retrieve the default module
*
* @param int $idtpl Layout number to browse
* @param int $container Container number
*
* @return array Allowed container types
*/
function tplGetContainerDefault($idlay, $container) {
global $db;
global $cfg;
global $containerinf;
if (is_array($containerinf[$idlay])) {
if (array_key_exists($container, $containerinf[$idlay])) {
return $containerinf[$idlay][$container]["default"];
}
}
}
/**
* Preparse the layout for caching purposes
*
* @param int $idtpl Layout number to browse
*
* @return none
*/
function tplPreparseLayout($idlay, $raw_code = NULL) {
global $containerinf;
global $db;
global $cfg;
if (is_null($raw_code) || empty($raw_code)) {
$sql = "SELECT code FROM " . $cfg["tab"]["lay"] . " WHERE idlay='" . Contenido_Security::toInteger($idlay) . "'";
$db->query($sql);
$db->next_record();
$code = $db->f("code");
} else {
$code = $raw_code;
}
$parser = new HtmlParser($code);
$bIsBody = false;
while ($parser->parse()) {
if (strtolower($parser->iNodeName) == 'body') {
$bIsBody = true;
}
if ($parser->iNodeName == "container" && $parser->iNodeType == NODE_TYPE_ELEMENT) {
$idcontainer = $parser->iNodeAttributes["id"];
$sMode = (isset($parser->iNodeAttributes["mode"]))?$parser->iNodeAttributes["mode"]:'optional';
$sDefault = (isset($parser->iNodeAttributes["default"]))?$parser->iNodeAttributes["default"]:'';
$sTypes = (isset($parser->iNodeAttributes["types"]))?$parser->iNodeAttributes["types"]:'';
$containerinf[$idlay][$idcontainer]["name"] = $parser->iNodeAttributes["name"];
$containerinf[$idlay][$idcontainer]["mode"] = $sMode;
$containerinf[$idlay][$idcontainer]["default"] = $sDefault;
$containerinf[$idlay][$idcontainer]["types"] = $sTypes;
$containerinf[$idlay][$idcontainer]["is_body"] = $bIsBody;
}
}
}
/**
* Duplicate a template
*
* @param int $idtpl ID of the template to duplicate
*
* @return $new_idtpl ID of the duplicated template
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.>
*/
function tplDuplicateTemplate($idtpl) {
global $db, $client, $lang, $cfg, $sess, $auth;
$db2 = new DB_ConLite;
$sql = "SELECT
*
FROM
" . $cfg["tab"]["tpl"] . "
WHERE
idtpl = '" . Contenido_Security::toInteger($idtpl) . "'";
$db->query($sql);
$db->next_record();
$idclient = $db->f("idclient");
$idlay = $db->f("idlay");
$new_idtpl = $db->nextid($cfg["tab"]["tpl"]);
//modified (added) 2008-06-30 timo.trautmann added fix module settings were also copied
$idtpl_conf = $db->f("idtplcfg");
if ($idtpl_conf) {
$new_idtpl_conf = $db->nextid($cfg["tab"]["tpl_conf"]);
}
//modified (added) 2008-06-30 end
$name = sprintf(i18n("%s (Copy)"), $db->f("name"));
$descr = $db->f("description");
$author = $auth->auth["uname"];
$created = time();
$lastmod = time();
//modified (added) 2008-06-30 : idtplcfg -> $new_idtpl
$sql = "INSERT INTO
" . $cfg["tab"]["tpl"] . "
(idclient, idlay, idtpl, " . ($idtpl_conf ? 'idtplcfg,' : '') . " name, description, deletable,author, created, lastmodified)
VALUES
('" . Contenido_Security::toInteger($idclient) . "', '" . Contenido_Security::toInteger($idlay) . "', '" . Contenido_Security::toInteger($new_idtpl) . "', " . ($idtpl_conf ? "'" . Contenido_Security::toInteger($new_idtpl_conf) . "', " : '') . " '" . Contenido_Security::escapeDB($name, $db) . "',
'" . Contenido_Security::escapeDB($descr, $db) . "', '1', '" . Contenido_Security::escapeDB($author, $db) . "', '" . Contenido_Security::escapeDB($created, $db) . "', '" . Contenido_Security::escapeDB($lastmod, $db) . "')";
$db->query($sql);
$a_containers = array();
$sql = "SELECT
*
FROM
" . $cfg["tab"]["container"] . "
WHERE
idtpl = '" . Contenido_Security::toInteger($idtpl) . "'
ORDER BY
number";
$db->query($sql);
while ($db->next_record()) {
$a_containers[$db->f("number")] = $db->f("idmod");
}
foreach ($a_containers as $key => $value) {
$nextid = $db->nextid($cfg["tab"]["container"]);
$sql = "INSERT INTO " . $cfg["tab"]["container"] . "
(idcontainer, idtpl, number, idmod) VALUES ('" . Contenido_Security::toInteger($nextid) . "', '" . Contenido_Security::toInteger($new_idtpl) . "', '" . Contenido_Security::toInteger($key) . "', '" . Contenido_Security::toInteger($value) . "')";
$db->query($sql);
}
//modified (added) 2008-06-30 timo.trautmann added fix module settings were also copied
if ($idtpl_conf) {
$a_container_cfg = array();
$sql = "SELECT
*
FROM
" . $cfg["tab"]["container_conf"] . "
WHERE
idtplcfg = '" . Contenido_Security::toInteger($idtpl_conf) . "'
ORDER BY
number";
$db->query($sql);
while ($db->next_record()) {
$a_container_cfg[$db->f("number")] = $db->f("container");
}
foreach ($a_container_cfg as $key => $value) {
$nextid = $db->nextid($cfg["tab"]["container_conf"]);
$sql = "INSERT INTO " . $cfg["tab"]["container_conf"] . "
(idcontainerc, idtplcfg, number, container) VALUES ('" . Contenido_Security::toInteger($nextid) . "', '" . Contenido_Security::toInteger($new_idtpl_conf) . "', '" . Contenido_Security::escapeDB($key, $db) . "', '" . Contenido_Security::escapeDB($value, $db) . "')";
$db->query($sql);
}
}
//modified (added) 2008-06-30 end
cInclude("includes", "functions.rights.php");
copyRightsForElement("tpl", $idtpl, $new_idtpl);
return $new_idtpl;
}
/**
* Checks if a template is in use
*
* @param int $idtpl Template ID
*
* @return bool is template in use
*
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG <www.4fb.de>
*
* modified Munkh-Ulzii Balidar, improved the sql query without while loop
*/
function tplIsTemplateInUse($idtpl) {
global $cfg, $client, $lang;
$db = new DB_ConLite;
// Check categorys
$sql = "SELECT
b.idcatlang, b.name, b.idlang, b.idcat
FROM
" . $cfg["tab"]["cat"] . " AS a,
" . $cfg["tab"]["cat_lang"] . " AS b
WHERE
a.idclient = '" . Contenido_Security::toInteger($client) . "' AND
a.idcat = b.idcat AND
b.idtplcfg IN (SELECT idtplcfg FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtpl = '" . $idtpl . "')
ORDER BY b.idlang ASC, b.name ASC ";
$db->query($sql);
if ($db->Errno == '' && $db->num_rows() > 0) {
return true;
}
// Check articles
$sql = "SELECT
b.idartlang, b.title, b.idlang, b.idart
FROM
" . $cfg["tab"]["art"] . " AS a,
" . $cfg["tab"]["art_lang"] . " AS b
WHERE
a.idclient = '" . Contenido_Security::toInteger($client) . "' AND
a.idart = b.idart AND
b.idtplcfg IN (SELECT idtplcfg FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtpl = '" . $idtpl . "')
ORDER BY b.idlang ASC, b.title ASC ";
$db->query($sql);
if ($db->Errno == '' && $db->num_rows() > 0) {
return true;
}
return false;
}
/**
* Get used datas if a template is in use
*
* @param int $idtpl Template ID
*
* @return array - category name, article name
*
* @author Munkh-Ulzii Balidar <munkh-ulzii.balidar@4fb.de>
* @copyright four for business AG <www.4fb.de>
*/
function tplGetInUsedData($idtpl) {
global $cfg, $client, $lang;
$db = new DB_ConLite;
$aUsedData = array();
// Check categorys
$sql = "SELECT
b.idcatlang, b.name, b.idlang, b.idcat
FROM
" . $cfg["tab"]["cat"] . " AS a,
" . $cfg["tab"]["cat_lang"] . " AS b
WHERE
a.idclient = '" . Contenido_Security::toInteger($client) . "' AND
a.idcat = b.idcat AND
b.idtplcfg IN (SELECT idtplcfg FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtpl = '" . $idtpl . "')
ORDER BY b.idlang ASC, b.name ASC ";
$db->query($sql);
if ($db->Errno == 0 && $db->num_rows() > 0) {
while ($db->next_record()) {
$aUsedData['cat'][] = array(
'name' => $db->f('name'),
'lang' => $db->f('idlang'),
'idcat' => $db->f('idcat'),
);
}
}
// Check articles
$sql = "SELECT
b.idartlang, b.title, b.idlang, b.idart
FROM
" . $cfg["tab"]["art"] . " AS a,
" . $cfg["tab"]["art_lang"] . " AS b
WHERE
a.idclient = '" . Contenido_Security::toInteger($client) . "' AND
a.idart = b.idart AND
b.idtplcfg IN (SELECT idtplcfg FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtpl = '" . $idtpl . "')
ORDER BY b.idlang ASC, b.title ASC ";
$db->query($sql);
if ($db->Errno == '' && $db->num_rows() > 0) {
while ($db->next_record()) {
$aUsedData['art'][] = array(
'title' => $db->f('title'),
'lang' => $db->f('idlang'),
'idart' => $db->f('idart'),
);
}
}
return $aUsedData;
}
/**
* Copies a complete template configuration
*
* @param int $idtplcfg Template Configuration ID
*
* @return int new template configuration ID
*
*/
function tplcfgDuplicate($idtplcfg) {
global $cfg;
$db = new DB_ConLite;
$db2 = new DB_ConLite;
$sql = "SELECT
idtpl, status, author, created, lastmodified
FROM
" . $cfg["tab"]["tpl_conf"] . "
WHERE
idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'";
$db->query($sql);
if ($db->next_record()) {
$newidtplcfg = $db2->nextid($cfg["tab"]["tpl_conf"]);
$idtpl = $db->f("idtpl");
$status = $db->f("status");
$author = $db->f("author");
$created = $db->f("created");
$lastmodified = $db->f("lastmodified");
$sql = "INSERT INTO
" . $cfg["tab"]["tpl_conf"] . "
(idtplcfg, idtpl, status, author, created, lastmodified)
VALUES
('" . Contenido_Security::toInteger($newidtplcfg) . "', '" . Contenido_Security::toInteger($idtpl) . "', '" . Contenido_Security::toInteger($status) . "', '" . Contenido_Security::escapeDB($author, $db2) . "',
'" . Contenido_Security::escapeDB($created, $db2) . "', '" . Contenido_Security::escapeDB($lastmodified, $db2) . "')";
$db2->query($sql);
/* Copy container configuration */
$sql = "SELECT
number, container
FROM
" . $cfg["tab"]["container_conf"] . "
WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'";
$db->query($sql);
while ($db->next_record()) {
$newidcontainerc = $db2->nextid($cfg["tab"]["container_conf"]);
$number = $db->f("number");
$container = $db->f("container");
$sql = "INSERT INTO
" . $cfg["tab"]["container_conf"] . "
(idcontainerc, idtplcfg, number, container)
VALUES
('" . Contenido_Security::toInteger($newidcontainerc) . "', '" . Contenido_Security::toInteger($newidtplcfg) . "', '" . Contenido_Security::toInteger($number) . "', '" . Contenido_Security::escapeDB($container, $db2) . "')";
$db2->query($sql);
}
}
return ($newidtplcfg);
}
/*
* tplAutoFillModules
*
* This function fills in modules automatically using this logic:
*
* - If the container mode is fixed, insert the named module (if exists)
* - If the container mode is mandatory, insert the "default" module (if exists)
*
* TODO: The default module is only inserted in mandatory mode if the container
* is empty. We need a better logic for handling "changes".
*/
function tplAutoFillModules($idtpl) {
global $cfg;
global $db_autofill;
global $containerinf;
global $_autoFillcontainerCache;
if (!is_object($db_autofill)) {
$db_autofill = new DB_ConLite;
}
$sql = "SELECT idlay FROM " . $cfg["tab"]["tpl"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'";
$db_autofill->query($sql);
if (!$db_autofill->next_record()) {
return false;
}
$idlay = $db_autofill->f("idlay");
if (!(is_array($containerinf) && array_key_exists($idlay, $containerinf) && array_key_exists($idlay, $_autoFillcontainerCache))) {
tplPreparseLayout($idlay);
$_autoFillcontainerCache[$idlay] = tplBrowseLayoutForContainers($idlay);
}
$a_container = explode("&", $_autoFillcontainerCache[$idlay]);
foreach ($a_container as $container) {
switch ($containerinf[$idlay][$container]["mode"]) {
/* Fixed mode */
case "fixed":
if ($containerinf[$idlay][$container]["default"] != "") {
$sql = "SELECT idmod FROM " . $cfg["tab"]["mod"]
. " WHERE name = '" .
Contenido_Security::escapeDB($containerinf[$idlay][$container]["default"], $db_autofill) . "'";
$db_autofill->query($sql);
if ($db_autofill->next_record()) {
$idmod = $db_autofill->f("idmod");
$sql = "SELECT idcontainer FROM " . $cfg["tab"]["container"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "' AND number = '" . Contenido_Security::toInteger($container) . "'";
$db_autofill->query($sql);
if ($db_autofill->next_record()) {
$sql = "UPDATE " . $cfg["tab"]["container"] .
" SET idmod = '" . Contenido_Security::toInteger($idmod) . "' WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'" .
" AND number = '" . Contenido_Security::toInteger($container) . "' AND " .
" idcontainer = '" . Contenido_Security::toInteger($db_autofill->f("idcontainer")) . "'";
$db_autofill->query($sql);
} else {
$sql = "INSERT INTO " . $cfg["tab"]["container"] .
" (idcontainer, idtpl, number, idmod) " .
" VALUES ('" . $db_autofill->nextid($cfg["tab"]["container"]) . "', " .
" '$idtpl', '$container', '$idmod')";
$db_autofill->query($sql);
}
}
}
case "mandatory":
if ($containerinf[$idlay][$container]["default"] != "") {
$sql = "SELECT idmod FROM " . $cfg["tab"]["mod"]
. " WHERE name = '" .
Contenido_Security::escapeDB($containerinf[$idlay][$container]["default"], $db) . "'";
$db_autofill->query($sql);
if ($db_autofill->next_record()) {
$idmod = $db_autofill->f("idmod");
$sql = "SELECT idcontainer, idmod FROM " . $cfg["tab"]["container"]
. " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "' AND number = '" . Contenido_Security::toInteger($container) . "'";
$db_autofill->query($sql);
if ($db_autofill->next_record()) {
} else {
$sql = "INSERT INTO " . $cfg["tab"]["container"] .
" (idcontainer, idtpl, number, idmod) " .
" VALUES ('" . Contenido_Security::toInteger($db_autofill->nextid($cfg["tab"]["container"])) . "', " .
" '" . Contenido_Security::toInteger($idtpl) . "', '" . Contenido_Security::toInteger($container) . "', '" . Contenido_Security::toInteger($idmod) . "')";
$db_autofill->query($sql);
}
}
}
}
}
}
?>