<?php

/**
 * Project: 
 * Contenido Content Management System
 * 
 * Description: 
 * Edit clients
 * 
 * Requirements: 
 * @con_php_req 5.0
 * 
 *
 * @package    Contenido Backend includes
 * @version    1.0.0
 * @author     Timo A. Hummel
 * @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-04-30
 *   modified 2008-06-26, Dominik Ziegler, add security fix
 *
 *   $Id$:
 * }}
 * 
 */
if (!defined('CON_FRAMEWORK')) {
    die('Illegal call');
}


$properties = new PropertyCollection;

$db2 = new DB_ConLite;

if ($action == "client_new") {
    $nextid = $db->nextid($cfg["tab"]["clients"]);
    $idclient = $nextid;
    $new = true;
}
if (!$perm->have_perm_area_action($area)) {
    $notification->displayNotification("error", i18n("Permission denied"));
} else {
    if (!isset($idclient)) {
        $notification->displayNotification("error", i18n("No client ID passed"));
    } else {
        if (($action == "client_edit") && ($perm->have_perm_area_action($area, $action))) {
            $sNewNotification = '';
            if ($active != "1") {
                $active = "0";
            }

            if ($new == true) {

                $sLangNotification = i18n('Notice: In order to use this client, you must create a new language for it.');
                $sTarget = $sess->url('frameset.php?area=lang');
                $sJsLink = "parent.parent.location.href='" . $sTarget . "';
                            top.header.markActive(top.header.document.getElementById('sub_lang'));";
                $sLangNotificationLink = sprintf(i18n('Please click %shere%s to create a new language.'), '<a href="javascript://" onclick="' . $sJsLink . '">', '</a>');
                $sNewNotification = '<br>' . $sLangNotification . '<br>' . $sLangNotificationLink;
                if (substr($frontendpath, strlen($frontendpath) - 1) != "/") {
                    $frontendpath .= "/";
                }

                if (substr($htmlpath, strlen($htmlpath) - 1) != "/") {
                    $htmlpath .= "/";
                }

                $sql = "INSERT INTO
	                " . $cfg["tab"]["clients"] . "
	                SET
	                    name = '" . Contenido_Security::escapeDB($clientname, $db) . "',
	                    frontendpath = '" . Contenido_Security::escapeDB($frontendpath, $db) . "',
	                    htmlpath = '" . Contenido_Security::escapeDB($htmlpath, $db) . "',
	                    errsite_cat = '" . Contenido_Security::toInteger($errsite_cat) . "',
	                    errsite_art = '" . Contenido_Security::toInteger($errsite_art) . "',
	                    idclient = '" . Contenido_Security::toInteger($idclient) . "'";

                $properties->setValue("idclient", $idclient, "backend", "clientimage", $clientlogo);

                // Copy the client template to the real location
                $destPath = $frontendpath;
                $sourcePath = $cfg['path']['contenido'] . $cfg['path']['frontendtemplate'];

                if ($copytemplate) {
                    if (!file_exists($destPath)) {
                        if (recursive_copy($sourcePath, $destPath)) {
                            $res = fopen($destPath . "config.php", "rb+");
                            $res2 = fopen($destPath . "config.php.new", "ab+");
                            if ($res && $res2) {
                                while (!feof($res)) {
                                    $buffer = fgets($res, 4096);
                                    $buffer = str_replace("!CLIENT!", $idclient, $buffer);
                                    $buffer = str_replace("!PATH!", $cfg["path"]["contenido"], $buffer);
                                    fwrite($res2, $buffer);
                                }
                            } else {
                                $notification->displayNotification("error", i18n("Couldn't write the file config.php."));
                            }

                            fclose($res);
                            fclose($res2);

                            unlink($destPath . "config.php");
                            rename($destPath . "config.php.new", $destPath . "config.php");
                            $message = sprintf(i18n("Succesfully copied client-template to %s."), $destPath);
                            $notification->displayNotification("info", $message);
                        } else {
                            $message = sprintf(i18n("Cannot create directory %s . The client was created, but you have to copy the frontend-template yourself"), $destPath);
                            $notification->displayNotification("warning", $message);
                        }
                    } else {
                        $message = sprintf(i18n("The directory %s already exists. The client was created, but you have to copy the frontend-template yourself"), $destPath);
                        $notification->displayNotification("warning", $message);
                    }
                } else {
                    $message = sprintf(i18n("Client '%s' created."), $clientname);
                    $notification->displayNotification("info", $message);
                }
                rereadClients();
            } else {
                $pathwithoutslash = $frontendpath;
                if (substr($frontendpath, strlen($frontendpath) - 1) != "/") {
                    $frontendpath .= "/";
                }

                if (substr($htmlpath, strlen($htmlpath) - 1) != "/") {
                    $htmlpath .= "/";
                }

                if (($oldpath != $frontendpath) && ($oldpath != $pathwithoutslash)) {
                    $notification->displayNotification("warning", i18n("You changed the client path. You might need to copy the frontend to the new location"));
                }
                $sql = "UPDATE 
                            " . $cfg["tab"]["clients"] . "
                            SET
                            name = '" . Contenido_Security::escapeDB($clientname, $db) . "',
                            frontendpath = '" . Contenido_Security::escapeDB($frontendpath, $db) . "',
                            htmlpath = '" . Contenido_Security::escapeDB($htmlpath, $db) . "',
                            errsite_cat = '" . Contenido_Security::toInteger($errsite_cat) . "',
                            errsite_art = '" . Contenido_Security::toInteger($errsite_art) . "'
                            WHERE
                            idclient = '" . Contenido_Security::toInteger($idclient) . "'";
            }

            $db->query($sql);
            $new = false;
            rereadClients();

            $properties->setValue("idclient", $idclient, "backend", "clientimage", $clientlogo);

            /* Clear the con_code table */
            $sql = "DELETE FROM " . $cfg["tab"]["code"] . " WHERE idclient = '" . Contenido_Security::toInteger($idclient) . "'";
            $db->query($sql);

            $notification->displayNotification("info", i18n("Changes saved") . $sNewNotification);

            $cApiClient = new cApiClient;
            $cApiClient->loadByPrimaryKey($idclient);

            if (isset($_REQUEST["generate_xhtml"])) {
                switch ($_REQUEST["generate_xhtml"]) {
                    case "html":
                        $cApiClient->setProperty("generator", "xhtml", "false");
                        $cApiClient->setProperty("generator", "html5", "false");
                        break;

                    case "xhtml":
                        $cApiClient->setProperty("generator", "xhtml", "true");
                        $cApiClient->setProperty("generator", "html5", "false");
                        break;

                    case "html5":
                        $cApiClient->setProperty("generator", "xhtml", "false");
                        $cApiClient->setProperty("generator", "html5", "true");
                        break;

                    default: // do nothing
                        break;
                }
            }
        }


        $tpl->reset();

        $sql = "SELECT
	                idclient, name, frontendpath, htmlpath, errsite_cat, errsite_art
	            FROM
	                " . $cfg["tab"]["clients"] . "
	            WHERE
	                idclient = '" . Contenido_Security::toInteger($idclient) . "'";

        $db->query($sql);

        $db->next_record();

        $form = '<form name="client_properties" method="post" action="' . $sess->url("main.php?") . '">
	                 ' . $sess->hidden_session() . '
	                 <input type="hidden" name="area" value="' . $area . '">
	                 <input type="hidden" name="action" value="client_edit">
	                 <input type="hidden" name="frame" value="' . $frame . '">
	                 <input type="hidden" name="new" value="' . $new . '">
	                 <input type="hidden" name="oldpath" value="' . $db->f("frontendpath") . '">
	                 <input type="hidden" name="idclient" value="' . $idclient . '">';

        $tpl->set('s', 'JAVASCRIPT', $javascript);
        $tpl->set('s', 'FORM', $form);
        $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]);
        $tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]);
        $tpl->set('s', 'SUBMITTEXT', i18n("Save changes"));
        $tpl->set('s', 'CANCELTEXT', i18n("Discard changes"));
        $tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4&idclient=$idclient"));

        if ($error) {
            echo $error;
        }

        $tpl->set('d', 'CATNAME', i18n("Property"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]);
        $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', i18n("Value"));
        $tpl->set('d', 'BRDRT', 1);
        $tpl->set('d', 'BRDRB', 0);
        $tpl->set('d', 'FONT', 'textg_medium');
        $tpl->next();

        $tpl->set('d', 'CATNAME', i18n("Client name"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "clientname", clHtmlSpecialChars($db->f("name")), 50, 255));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $serverpath = $db->f("frontendpath");

        if ($serverpath == "") {
            $serverpath = $cfg['path']['frontend'];
        }

        $tpl->set('d', 'CATNAME', i18n("Server path"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "frontendpath", clHtmlSpecialChars($serverpath), 50, 255));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $htmlpath = $db->f("htmlpath");

        if ($htmlpath == "") {
            $htmlpath = "http://";
        }

        $tpl->set('d', 'CATNAME', i18n("Web address"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "htmlpath", clHtmlSpecialChars($htmlpath), 50, 255));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $tpl->set('d', 'CATNAME', i18n("Error page category"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "errsite_cat", $db->f("errsite_cat"), 10, 10));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $tpl->set('d', 'CATNAME', i18n("Error page article"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "errsite_art", $db->f("errsite_art"), 10, 10));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $clientLogo = $properties->getValue("idclient", $idclient, "backend", "clientimage");

        $tpl->set('d', 'CATNAME', i18n("Client logo"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
        $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', formGenerateField("text", "clientlogo", $clientLogo, 50, 255));
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        $aChoices = array("html" => i18n("HTML"), "xhtml" => i18n("XHTML"), "html5" => i18n("HTML5"));

        $oXHTMLSelect = new cHTMLSelectElement("generate_xhtml");
        $oXHTMLSelect->autoFill($aChoices);

        $cApiClient = new cApiClient;
        $cApiClient->loadByPrimaryKey($idclient);
        if ($cApiClient->getProperty("generator", "xhtml") == 'true') {
            $oXHTMLSelect->setDefault("xhtml");
        } else if ($cApiClient->getProperty("generator", "html5") == 'true') {
            $oXHTMLSelect->setDefault("html5");
        } else {
            $oXHTMLSelect->setDefault("html");
        }

        $tpl->set('d', 'CATNAME', i18n("Generate"));
        $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
        $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
        $tpl->set('d', 'CATFIELD', $oXHTMLSelect->render());
        $tpl->set('d', 'BRDRT', 0);
        $tpl->set('d', 'BRDRB', 1);
        $tpl->set('d', 'FONT', 'text_medium');
        $tpl->next();

        if ($new == true) {
            $tpl->set('d', 'CATNAME', i18n("Copy frontend template"));
            $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
            $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
            $tpl->set('d', 'CATFIELD', formGenerateCheckbox("copytemplate", "checked", 1));
            $tpl->next();
        }

        $tpl->set('s', 'IDCLIENT', $idclient);

        # Generate template
        $tpl->generate($cfg['path']['templates'] . $cfg['templates']['client_edit']);
    }
}
?>
