Kann keinen neuen Baum anlegen...

FriFra
Beiträge: 51
Registriert: So 19. Dez 2004, 20:28
Kontaktdaten:

Beitrag von FriFra »

Ich habe alle beschriebenen Änderungen an functions.str.php vorgenommen con_cat_tree geleert und hab beim Anlegen eines neuen Tree wieder einen Error 500 bekommen :?

functions.str.php:

Code: Alles auswählen

<?php
/******************************************************************************
Description : Defines the 'str' related functions
Copyright   : four for business AG
Author      : Olaf Niemann
Urls        : www.contenido.de
Create date : 2002-03-02

Functions
strNewTree($catname)
strNewCategory($tmp_parentid, $catname)
strOrderedPostTreeList ($idcat, $poststring)
strRemakeTreeTable()
strNextDeeper($tmp_idcat)
strNextPost($tmp_idcat)
strNextBackwards($tmp_idcat)
strRemakeTreeTableFindNext($tmp_idcat,$tmp_level)
strShowTreeTable()
strRenameCategory ($idcat, $lang, $newcategoryname)
strMakeVisible ($idcat, $lang, $visible)
strMakePublic ($idcat, $lang, $public)
strDeleteCategory ($idcat)
strMoveUpCategory ($idcat)
strMoveSubtree ($idcat, $parentid_new)
strMoveCatTargetallowed($idcat, $source)
********************************************************************************/
cInclude("classes", "contenido/class.category.php");
cInclude("classes", "contenido/class.categorylanguage.php");
cInclude("classes", "contenido/class.template.php");
cInclude("classes", "contenido/class.templateconfig.php");
cInclude("classes", "contenido/class.containerconfig.php");
cInclude("classes", "contenido/class.container.php");
cInclude("includes", "functions.con.php");

global $db_str;


if (class_exists("DB_Contenido"))
{
	$db_str = new DB_Contenido;
}

function strNewTree($catname) {
        global $db;
        global $client;
        global $lang;
        global $cfg;
        global $area_tree;
        global $sess;
        global $perm;
        global $area_rights;
        global $item_rights;
        global $_SESSION;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		global $auth;

		$remakeCatTable = true;
		$remakeStrTable = true;


            $db2= new DB_Contenido;

	    $tmp_newid = $db->nextid($cfg["tab"]["cat"]);

	    if (trim($catname) == "" || $tmp_newid == 0)
	    {
	        return;
	    }
	
	    if ($tmp_newid == 0)
	    {
	        return;
	    }
        

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='0' AND postid='0' AND idclient='$client'";
        $db->query($sql);
        $db->next_record();
        $tmp_id = $db->f("idcat");

        $a_languages[] = $lang;
        
        if (is_array($a_languages)) {

                if (!$tmp_id) {
                        //********** Entry in 'cat'-table ************
                        $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, preid, postid, idclient, author, created, lastmodified) VALUES('$tmp_newid', '0', '0', '$client','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                        $db->query($sql);

                        //********* enter name of cat in 'cat_lang'-table ******
                        foreach ($a_languages as $tmp_lang) {
                                 if ($tmp_lang == $lang) {
                                         $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                        $db->query($sql);
                                } else {
                                        $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                        $db->query($sql);
                                }
                        }
                } else {
                        //********** Entry in 'cat'-table ************
                        $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_newid' WHERE idcat='$tmp_id'";
                        $db->query($sql);

                        //********** Entry in 'cat'-table ************
                        $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, preid, postid, idclient, author, created, lastmodified) VALUES('$tmp_newid', '$tmp_id', '0', '$client','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                        $db->query($sql);

                        //********* enter name of cat in 'cat_lang'-table ******
                        foreach ($a_languages as $tmp_lang) {
                                 if ($tmp_lang == $lang) {
                                        $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                        $db->query($sql);
                                } else {
                                        $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                        $db->query($sql);
                                }
                        }
                }

                // set correct rights for element
		        cInclude ("includes", "functions.rights.php");
		        foreach ($a_languages as $tmp_lang) {
		
		            createRightsForElement("str", $tmp_newid, $tmp_lang);
		            createRightsForElement("con", $tmp_newid, $tmp_lang);
		
		        }

        }
        
        /* Search for default template */
        $templateCollection = new cApiTemplateCollection("defaulttemplate = '1' AND idclient = '$idclient'");
        
        if ($template = $templateCollection->next())
        {
        	$idtpl = $template->get("idtpl");
        		
            /* Assign template, if default template exists */
            
            $catCollection = new cApiCategoryLanguageCollection("idcat = '$tmp_newid'");
            
            while ($cat = $catCollection->next())
            {
            	$cat->assignTemplate($idtpl);
            }        	
        }

        
        return ($tmp_newid);
}

function strNewCategory($tmp_parentid, $catname, $remakeTree = true) {
        global $db;
        global $client;
        global $lang;
        global $cfg;
        global $area_tree;
        global $perm;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		global $auth;


        $db2= new DB_Contenido;

	    $tmp_newid = $db->nextid($cfg["tab"]["cat"]);
	
		if (trim($catname) == "" || $tmp_newid == 0)
	    {
	        return;
	    }
	
	    if ($tmp_newid == 0)
	    {
	        return;
	    }


		$remakeCatTable = true;
		$remakeStrTable = true;

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='$tmp_parentid' AND postid=0";
        $db->query($sql);
        $db->next_record();
        $tmp_id = $db->f("idcat");

        if (!$tmp_id) {
                //********** Entry in 'cat'-table ************
                $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, parentid, preid, postid, idclient, author, created, lastmodified) VALUES('$tmp_newid', '$tmp_parentid', '0', '0', '$client','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                $db->query($sql);


                //********* enter name of cat in 'cat_lang'-table ******
                $a_languages[] = $lang;
                
                foreach ($a_languages as $tmp_lang) {
                         if ($tmp_lang == $lang) {
                                 $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                $db->query($sql);
                        } else {
                                $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                $db->query($sql);
                        }
                }
        } else {
                //********** Entry in 'cat'-table ************
                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_newid', lastmodified = '".date("Y-m-d H:i:s")."' WHERE idcat='$tmp_id'";
                $db->query($sql);

                //********** Entry in 'cat'-table ************
                $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, parentid, preid, postid, idclient, author, created, lastmodified) VALUES('$tmp_newid', '$tmp_parentid', '$tmp_id', '0', '$client','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                $db->query($sql);

                //********* enter name of cat in 'cat_lang'-table ******
                $a_languages[] = $lang;
                foreach ($a_languages as $tmp_lang) {
                         if ($tmp_lang == $lang) {
                                $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                $db->query($sql);
                        } else {
                                $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) VALUES('".$db->nextid($cfg["tab"]["cat_lang"])."','$tmp_newid','$tmp_lang','".htmlspecialchars($catname, ENT_QUOTES)."','0','1','0', '".htmlspecialchars(capiStrCleanURLCharacters($catname), ENT_QUOTES)."','".$auth->auth['uname']."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
                                $db->query($sql);
                        }
                }

        }

        // set correct rights for element
	    cInclude ("includes", "functions.rights.php");
	    foreach ($a_languages as $tmp_lang) {
	
	        copyRightsForElement("str", $tmp_parentid, $tmp_newid, $tmp_lang);
			copyRightsForElement("con", $tmp_parentid, $tmp_newid, $tmp_lang); 
	    }

        if ($remakeTree == true)
        {
        	strRemakeTreeTable();
        }
        
        /* Search for default template */
        $templateCollection = new cApiTemplateCollection("defaulttemplate = '1' AND idclient = '$client'");

        if ($template = $templateCollection->next())
        {
        	$idtpl = $template->get("idtpl");
        		
            /* Assign template, if default template exists */
            
            $catCollection = new cApiCategoryLanguageCollection("idcat = '$tmp_newid'");

            while ($cat = $catCollection->next())
            {
            	$cat->assignTemplate($idtpl);
            }        	
        }        

        return($tmp_newid);

}

function strOrderedPostTreeList ($idcat, $poststring) { 
        global $db; 
        global $client; 
        global $lang; 
        global $cfg; 

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid=0 AND preid='$idcat' AND idcat!=0"; 

        $db->query($sql); 
        if ( $db->next_record() ) { 
                $tmp_idcat = $db->f("idcat"); 
                $poststring = $poststring.",".$tmp_idcat; 
                $poststring = strOrderedPostTreeList($tmp_idcat, $poststring); 
        } 

        return $poststring; 

} 

function strRemakeTreeTable() { 
        global $db; 
        global $client; 
        global $lang; 
        global $cfg; 
      // Flag to rebuild the category table 
      global $remakeCatTable; 
      global $remakeStrTable; 
      $remakeCatTable = true; 
      $remakeStrTable = true; 

        $poststring = ""; 

        $sql = "DELETE FROM ".$cfg["tab"]["cat_tree"];                    // empty 'cat_tree'-table 
        $db->query($sql); 

        $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='0'"; 
        $db->query($sql); 

        $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='0'"; 
        $db->query($sql); 

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='0' AND preid='0' AND idcat!='0'"; 

        $db->query($sql); 
        while($db->next_record()) 
        { 
                $idcats[] = $db->f("idcat"); 
        } 

        if (is_array($idcats)) { 
                foreach ($idcats as $value) { 
                        $poststring = $poststring.$value.strOrderedPostTreeList ($value, "").","; 
                } 
        } 
        $poststring=ereg_replace(",$","", $poststring); 
        $a_maincats = explode(",", $poststring); 
        if (is_array($a_maincats)){ 
                foreach ($a_maincats as $tmp_idcat) { 
                        strRemakeTreeTableFindNext($tmp_idcat,0); 
                } 
        } 
}

function strNextDeeper($tmp_idcat, $ignore_lang = false) {
        global $cfg, $db_str, $lang;

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='$tmp_idcat' AND preid='0'";
        $db_str->query($sql);
        if ($db_str->next_record()) {     
        		$midcat = $db_str->f("idcat");
        		if ($ignore_lang == true)
        		{
        			return $midcat;
        		}

				//******deeper element exists
				/* Check for language dependent part */
				
				$sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$midcat' AND idlang='$lang'";
				$db_str->query($sql);
				
				if ($db_str->next_record())
				{
                	return $midcat;
				} else {
					return 0;
				}
        } else {                                        //******deeper element does not exist
                return 0;
        }
}

function strHasArticles($tmp_idcat) {
        global $cfg, $db_str;
        global $lang;

        $sql = "SELECT b.idartlang AS idartlang FROM 
					".$cfg["tab"]["cat_art"]." AS a,
					".$cfg["tab"]["art_lang"]." AS b
					WHERE a.idcat='$tmp_idcat' AND
					a.idart = b.idart AND b.idlang = '$lang'";

        $db_str->query($sql);
        
        if ($db_str->next_record()) {                         //******post element exists
                return true;
        } else {                                        //******post element does not exist
                return false;
        }
}
function strNextPost($tmp_idcat) {
        global $db;
        global $cfg;

        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE preid='$tmp_idcat'";
        $db->query($sql);
        if ($db->next_record()) {                         //******post element exists
                $tmp_idcat = $db->f("idcat");
                $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_idcat'";
                $db->query($sql);
                if ($db->next_record()) {                         //******parent from post must not be 0
                        $tmp_parentid = $db->f("parentid");
                        if ($tmp_parentid != 0) {
                                return $tmp_idcat;
                        } else {
                                return 0;
                        }
                } else {
                        return 99;
                }
        } else {                                        //******post element does not exist
                return 0;
        }
}

function strNextBackwards($tmp_idcat) {
        global $db;
        global $cfg;

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_idcat'";
        $db->query($sql);
        if ($db->next_record()) {                         //******parent exists
                $tmp_idcat = $db->f("parentid");
                if ($tmp_idcat != 0) {
                        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE preid='$tmp_idcat'";
                        $db->query($sql);
                        if ($db->next_record()) {                         //******parent has post
                                $tmp_idcat = $db->f("idcat");
                                $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_idcat'";
                                $db->query($sql);
                                if ($db->next_record()) {                         //******parent from post must not be 0
                                        $tmp_parentid = $db->f("parentid");
                                        if ($tmp_parentid != 0) {
                                                return $tmp_idcat;
                                        } else {
                                                return 0;
                                        }
                                } else {
                                        return 99;
                                }
                        } else {                                        //******parent has no post
                                return strNextBackwards($tmp_idcat);
                        }
                } else {
                        return 0;
                }
        } else {                                        //******no parent
                return 0;
        }

}

function strRemakeTreeTableFindNext($tmp_idcat,$tmp_level) {
        global $db;
        global $cfg;

        //************* Insert Element in 'cat_tree'-table **************
        $sql = "INSERT INTO ".$cfg["tab"]["cat_tree"]." (idtree, idcat, level) VALUES ('".$db->nextid($cfg["tab"]["cat_tree"])."', '$tmp_idcat', '$tmp_level')";
        $db->query($sql);

        //************* dig deeper, if possible ******
        $tmp = strNextDeeper($tmp_idcat, true);
        if ($tmp != 0) {
                $tmp_idcat = $tmp;
                $tmp_level++;

                strRemakeTreeTableFindNext($tmp_idcat,$tmp_level);

        } else {
                $tmp = strNextPost($tmp_idcat);
        //************ if not get post element ********
                if ($tmp != 0) {
                        $tmp_idcat = $tmp;

                        strRemakeTreeTableFindNext($tmp_idcat,$tmp_level);

        //************ if that's not possible either go backwards *********
                } else {
                        $tmp = strNextBackwards($tmp_idcat);
                        if ($tmp != 0) {
                                $tmp_idcat = $tmp;
                                $sql = "SELECT A.level FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND B.postid='$tmp_idcat'";
                                $db->query($sql);
                                if ($db->next_record()) {
                                        $tmp_level = $db->f("level");
                                } else {
                                        $level = 0;
                                }
                                if ($tmp_level != 0) {
                                        strRemakeTreeTableFindNext($tmp_idcat,$tmp_level);
                                }
                        }
                }

        }
}

function strShowTreeTable() {
        global $db;
        global $sess;
        global $client;
        global $lang;
        global $idcat;
        global $cfg;
        global $lngStr;

        echo "<br><table cellpadding=$cellpadding cellspacing=$cellspacing border=$border >";
        $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ORDER BY A.idtree";
        $db->query($sql);
        while($db->next_record())
        {
                $tmp_id    = $db->f("idcat");
                $tmp_name  = $db->f("name");
                $tmp_level = $db->f("level");

                echo "<tr><td>".$tmp_id." | ".$tmp_name." | ".$tmp_level."</td>";
                echo "<td><a class=action href=\"".$sess->url("main.php?action=20&idcat=$tmp_id")."\">".$lngStr["actions"]["20"]."</a></td>";
                echo "<td><a class=action href=\"".$sess->url("main.php?action=30&idcat=$tmp_id")."\">".$lngStr["actions"]["30"]."</a></td>";
                echo "</td></tr>";

        }
        echo "</table>";
}

function strRenameCategory ($idcat, $lang, $newcategoryname) {
        global $db;
        global $cfg;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		$remakeCatTable = true;
		$remakeStrTable = true;


        if ($newcategoryname != "") {
                $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET urlname='".htmlspecialchars(capiStrCleanURLCharacters($newcategoryname), ENT_QUOTES)."', name='".htmlspecialchars($newcategoryname, ENT_QUOTES)."', lastmodified = '".date("Y-m-d H:i:s")."' WHERE idcat='$idcat' AND idlang='$lang' ";
                $db->query($sql);

        } else {

                //echo ("Fehlermeldung aufrufen: strrenamecategory");
//                Header("Location: str_main.php?error=2");    // ohne Namen wird nicht umbenannt.

        }

}


function strMakeVisible ($idcat, $lang, $visible) {
        global $db;
        global $cfg;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		$remakeCatTable = true;
		$remakeStrTable = true;


                $a_catstring = strDeeperCategoriesArray($idcat);
        foreach ($a_catstring as $value) {
                $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET visible='$visible',lastmodified ='".date("Y-m-d H:i:s")."' WHERE idcat='$value' AND idlang='$lang' ";
                $db->query($sql);
        }

		if ($cfg["pathresolve_heapcache"] == true && $visible = 0)
		{
			$pathresolve_tablename = $cfg["sql"]["sqlprefix"]."_pathresolve_cache";
			$sql = "DELETE FROM %s WHERE idlang = '%s' AND idcat = '%s'";
			$db->query(sprintf($sql, $pathresolve_tablename, $lang, $idcat));
		}        
}

function strMakePublic ($idcat, $lang, $public) {
        global $db;
        global $cfg;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		$remakeCatTable = true;
		$remakeStrTable = true;


                $a_catstring = strDeeperCategoriesArray($idcat);
        foreach ($a_catstring as $value) {
                $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET public='$public', lastmodified = '".date("Y-m-d H:i:s")."' WHERE idcat='$value' AND idlang='$lang' ";
                $db->query($sql);
        }
}

function strDeeperCategoriesArray($idcat_start) {
        global $db;
        global $client;
        global $cfg;

        $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND idclient='$client' ORDER BY idtree";
        $db->query($sql);
        $i = 0;
        while ($db->next_record()) {
                if ($db->f("parentid") < $idcat_start) {        // ending part of tree
                        $i = 0;
                }
                if ($db->f("idcat") == $idcat_start) {        // starting part of tree
                        $i = 1;
                }
                if ($i == 1) {
                        $catstring[] = $db->f("idcat");
                }
        }

        return $catstring;
}


function strDeleteCategory ($idcat) {
    global $db;
    global $lang;
    global $client;
    global $lang;
    global $cfg;

    // Flag to rebuild the category table
    global $remakeCatTable;
    global $remakeStrTable;
    $remakeCatTable = true;
    $remakeStrTable = true;

    $db2 = new DB_Contenido;

    if (strNextDeeper($idcat)) {
        return "0201";        // category has subcategories
    } else {

        if (strHasArticles($idcat)) {
            return "0202";        // category has arts
        } else {

            /* Delete language dependend part */
            $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat' AND idlang='$lang'";
            $db->query($sql);

            $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat' AND idlang='$lang'";
            $db->query($sql);
            while ($db->next_record()) {
                ////// delete entry in 'tpl_conf'-table
                $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='".$db->f("idtplcfg")."'";
                $db2->query($sql);

                $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".$db->f("idtplcfg")."'";
                $db2->query($sql);
            }

            /* Are there any additional languages? */
            $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat'";
            $db->query($sql);

            if ($db->num_rows() > 0)
            {
              // more languages found...
              // delete rights for element
              cInclude ("includes", "functions.rights.php");
              deleteRightsForElement("str", $idcat, $lang);
              deleteRightsForElement("con", $idcat, $lang);

                return;
            }

            $sql = "SELECT * FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'";
            $db->query($sql);
            $db->next_record();
            $tmp_preid  = $db->f("preid");
            $tmp_postid = $db->f("postid");

            ////// update pre cat set new postid
            if ($tmp_preid != 0) {
                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_postid' WHERE idcat='$tmp_preid'";
                $db->query($sql);
            }

            ////// update post cat set new preid
            if ($tmp_postid != 0) {
                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='$tmp_preid' WHERE idcat='$tmp_postid'";
                $db->query($sql);
            }

            ////// delete entry in 'cat'-table
            $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat' ";
            $db->query($sql);

            $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat'";
            $db->query($sql);
            while ($db->next_record()) {
                ////// delete entry in 'tpl_conf'-table
                $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='".$db->f("idtplcfg")."'";
                $db2->query($sql);

                $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".$db->f("idtplcfg")."'";
                $db2->query($sql);
            }

            ////// delete entry in 'cat_lang'-table
            $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat'";
            $db->query($sql);

            ////// delete entry in 'cat_tree'-table
            $sql = "DELETE FROM ".$cfg["tab"]["cat_tree"]." WHERE idcat='$idcat'";
            $db->query($sql);

        }

        // delete rights for element
        cInclude ("includes", "functions.rights.php");
        deleteRightsForElement("str", $idcat);
        deleteRightsForElement("con", $idcat);

    }
}

function strMoveUpCategory ($idcat) {
        global $db;
        global $sess;
        global $cfg;

		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		$remakeCatTable = true;
		$remakeStrTable = true;


        $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'";
        $db->query($sql);
        $db->next_record();
        $tmp_idcat  = $db->f("idcat");
        $tmp_preid  = $db->f("preid");
        $tmp_postid = $db->f("postid");

        if ($tmp_preid != 0) {
                $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_preid'";
                $db->query($sql);
                $db->next_record();
                $tmp_idcat_pre  = $db->f("idcat");
                $tmp_preid_pre  = $db->f("preid");
                $tmp_postid_pre = $db->f("postid");

                $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_preid_pre'";
                $db->query($sql);
                $db->next_record();
                $tmp_idcat_pre_pre  = $db->f("idcat");
                $tmp_preid_pre_pre  = $db->f("preid");
                $tmp_postid_pre_pre = $db->f("postid");

                $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_postid'";
                $db->query($sql);
                $db->next_record();
                $tmp_idcat_post  = $db->f("idcat");
                $tmp_preid_post  = $db->f("preid");
                $tmp_postid_post = $db->f("postid");

                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET  postid='$tmp_idcat' WHERE idcat='$tmp_preid_pre'";
                $db->query($sql);

                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET  preid='$tmp_idcat', postid='$tmp_postid' WHERE idcat='$tmp_preid'";
                $db->query($sql);

                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET  preid='$tmp_preid_pre', postid='$tmp_preid' WHERE idcat='$tmp_idcat'";
                $db->query($sql);

                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET  preid='$tmp_idcat_pre' WHERE idcat='$tmp_postid'";
                $db->query($sql);

        }
}

function strMoveSubtree ($idcat, $parentid_new) {
        global $db;
        global $cfg;
		// Flag to rebuild the category table
		global $remakeCatTable;
		global $remakeStrTable;
		$remakeCatTable = true;
		$remakeStrTable = true;


        $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'";
        $db->query($sql);
        $db->next_record();
        $tmp_idcat  = $db->f("idcat");
        $tmp_preid  = $db->f("preid");
        $tmp_postid = $db->f("postid");

        //****************** update predecessor (pre)**********************
        if ($tmp_preid != 0) {
                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_postid' WHERE idcat='$tmp_preid'";
                $db->query($sql);
        }

        //****************** update follower (post)**********************
        if ($tmp_postid != 0) {
                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='$tmp_preid' WHERE idcat='$tmp_postid'";
                $db->query($sql);
        }

        //****************** find new pre ********************
        $sql = "SELECT idcat, preid FROM ".$cfg["tab"]["cat"]." WHERE parentid='$parentid_new' AND postid='0'";
        $db->query($sql);
        if ($db->next_record()) {
                $tmp_new_preid = $db->f("idcat");
                $tmp_preid_2   = $db->f("preid");
                if ($tmp_new_preid != $idcat) {
                        //******************** update new pre: set post **********************
                        $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$idcat' WHERE idcat='$tmp_new_preid'";
                        $db->query($sql);
                } else {
                        $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE idcat='$tmp_preid_2'";
                        $db->query($sql);
                        if ($db->next_record()) {
                                $tmp_new_preid = $db->f("idcat");
                                //******************** update new pre: set post **********************
                                $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$idcat' WHERE idcat='$tmp_new_preid'";
                                $db->query($sql);
                        } else {
                                $tmp_new_preid = 0;
                        }
                }
        } else {
                $tmp_new_preid = 0;
        }

        //*************** update idcat ********************
        $sql = "UPDATE ".$cfg["tab"]["cat"]." SET parentid='$parentid_new', preid='$tmp_new_preid', postid='0' WHERE idcat='$idcat'";
        $db->query($sql);
}

function strMoveCatTargetallowed($idcat, $source) {
        global $cfg;

        $tmpdb = new DB_Contenido;
        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'";
        $tmpdb->query($sql);
        $tmpdb->next_record();
        $p = $tmpdb->f("parentid");

        if ($p == $source) {
                return 0;
        } elseif ($p == 0) {
                return 1;
        } else {
                return strMoveCatTargetallowed($p, $source);
        }
}

function strSyncCategory($idcat, $sourcelang, $targetlang)
{
    global $cfg;
    
    $tmpdb = new DB_Contenido;
    
	/* Check if category already exists */
    $sql = "SELECT  idcat, idlang, idtplcfg, name,
            visible, public, status, author,
            created, lastmodified
        FROM
            ".$cfg["tab"]["cat_lang"]."
        WHERE
            idcat = '$idcat' AND idlang = '$targetlang'";
            
    $tmpdb->query($sql);
    
    if ($tmpdb->next_record())
    {
    	return false;
    }

	
    $sql = "SELECT  idcat, idlang, idtplcfg, name,
            visible, public, status, author,
            created, lastmodified
        FROM
            ".$cfg["tab"]["cat_lang"]."
        WHERE
            idcat = '$idcat' AND idlang = '$sourcelang'";

    $tmpdb->query($sql);

    if ($tmpdb->next_record())
    {
    if ($tmpdb->f("idtplcfg") != 0)
    {
        /* Copy the template configuration */
        $newidtplcfg = tplcfgDuplicate($tmpdb->f("idtplcfg"));
    } else {
        $newidtplcfg = 0;
    }
    $newidcatlang = $tmpdb->nextid($cfg["tab"]["cat_lang"]);

    $idcat = $tmpdb->f("idcat");
    $idlang = $targetlang;
    $idtplcfg = $newidtplcfg;
    $name = $tmpdb->f("name");
    $visible = 0;
    $public = $tmpdb->f("public");
    $status = $tmpdb->f("status");
    $author = $tmpdb->f("author");
    $created = $tmpdb->f("created");
    $lastmodified = $tmpdb->f("lastmodified");

    $sql = "INSERT INTO
        ".$cfg["tab"]["cat_lang"]."
        (idcatlang, idcat, idlang, idtplcfg, name,
         visible, public, status, author, created,
         lastmodified)
        VALUES
           ('$newidcatlang',
        '$idcat',
        '$idlang',
        '$idtplcfg',
        '$name',
        '$visible',
        '$public',
        '$status',
        '$author',
        '$created',
        '$lastmodified')";
    $tmpdb->query($sql);

    // set correct rights for element
    cInclude ("includes", "functions.rights.php");
    createRightsForElement("str", $idcat, $targetlang);
    createRightsForElement("con", $idcat, $targetlang);

    }

}

function strHasStartArticle ($idcat, $idlang)
{
	global $cfg, $db_str;
	

	if ($cfg["is_start_compatible"] == false)
	{
		$sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '$idcat' AND idlang='$idlang' AND startidartlang != 0";
		$db_str->query($sql);
		
		if ($db_str->next_record())
		{
			return true;
		}
	} else {
		$sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '$idcat' AND is_start = 1";
		$db_str->query($sql);
		
		if ($db_str->next_record())
		{
			return true;	
		}	
	}
	
	return false;
}

function strCopyCategory ($idcat, $destidcat, $remakeTree = true)
{
   global $cfg, $client, $lang;

   $newidcat = strNewCategory($destidcat, "a", $remakeTree);

   /* Selectors */
   $_oldcatlang = new cApiCategoryLanguageCollection;
   $_newcatlang = new cApiCategoryLanguageCollection;

   $_oldcatlang->select("idcat = '$idcat' AND idlang = '$lang'");
   $oldcatlang = $_oldcatlang->next();
   
   if (!is_object($oldcatlang))
   {
   		return;
   }
   
   $_newcatlang->select("idcat = '$newidcat' AND idlang = '$lang'");
   $newcatlang = $_newcatlang->next();
   
   if (!is_object($newcatlang))
   {
   		return;
   }   


   /* Worker objects */
   $newcat = new cApiCategory($newidcat);
   $oldcat = new cApiCategory($idcat);

   /* Copy properties */
   $newcatlang->set("name", sprintf(i18n("Copy of %s"), $oldcatlang->get("name")));
   $newcatlang->set("public", $oldcatlang->get("public"));
   $newcatlang->set("visible", 0);
   $newcatlang->store();

   /* Copy template configuration */
   if ($oldcatlang->get("idtplcfg") != 0)
   {
      /* Create new template configuration */
      $newcatlang->assignTemplate($oldcatlang->getTemplate());

      /* Copy the container configuration */
      $c_cconf = new cApiContainerConfigurationCollection;
      $m_cconf = new cApiContainerConfigurationCollection;
      $c_cconf->select("idtplcfg = '".$oldcatlang->get("idtplcfg")."'");

      while ($i_cconf = $c_cconf->next())
      {
         $m_cconf->create($newcatlang->get("idtplcfg"), $i_cconf->get("number"), $i_cconf->get("container"));
      }
   }

   $db = new DB_Contenido;
   $db2 = new DB_Contenido;

   /* Copy all articles */
   $sql = "SELECT A.idart, B.idartlang FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B WHERE A.idcat = '$idcat' AND B.idart = A.idart AND B.idlang = '$lang'";
   $db->query($sql);

   while ($db->next_record())
   {
      $newidart = conCopyArticle($db->f("idart"), $newidcat);
      if ($db->f("idartlang") == $oldcatlang->get("startidartlang"))
      {
         $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '$newidcat' AND idart = '$newidart'";
         $db2->query($sql);
         if ($db2->next_record())
         {
            conMakeStart($db2->f("idcatart"), 1);
         }
      }

   }

   return ($newidcat);
}

function strCopyTree ($idcat, $destcat, $remakeTree = true)
{
	global $cfg;

	$newidcat = strCopyCategory($idcat, $destcat, false);
	
	$db = new DB_Contenido;
	$db->query("SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid = '$idcat'");
	
	while ($db->next_record())
	{
		strCopyTree($db->f("idcat"), $newidcat, false);	
	}
	
	if ($remakeTree == true)
	{
		strRemakeTreeTable();
	}
}

?>
Gesperrt