Commit 6611f325 authored by Jan Köster's avatar Jan Köster
Browse files

mysql fix

parent 0ef9d8b5
Loading
Loading
Loading
Loading
+675 −0

File added.

Preview size limit exceeded, changes collapsed.

+139 −0
Changes for data/themes/default/webedit/template_faq-anbieterwahl-nasse-waende-wetzlar.xml: 139 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<WebEditor Version="1.0" editor="blogi">

    <Section background_color="#ffffff" padding="56px 24px" margin="0" max_width="100%">
        <Container background_color="#ffffff" padding="0" margin="0 auto" width="100%" max_width="820px">

            <TextBox font_family="inherit" font_size="1.55rem" font_color="#07071a" text_align="center" font_weight="700" custom_css="line-height:1.25;letter-spacing:-0.02em;margin-bottom:8px;">
<![CDATA[Häufige Fragen zur <span style="color:#61B517">Anbieterwahl</span>]]>
            </TextBox>
            <TextBox font_family="inherit" font_size="15px" font_color="#6a7060" text_align="center" font_weight="normal" custom_css="max-width:560px;margin:0 auto 28px;">
<![CDATA[Die wichtigsten Fragen rund um Auswahl, Kosten und Garantie – klar beantwortet.]]>
            </TextBox>

            <Grid columns="1fr" rows="auto" gap="14px" padding="0" width="100%">

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Seriosität]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Woran erkenne ich einen seriösen Betrieb für Mauertrockenlegung?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>seriösen Anbieter für nasse Wände erkennen]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Ein seriöser Betrieb misst zuerst die Feuchte, benennt die Ursache und gibt ein schriftliches Festpreisangebot – ohne Druck zum Sofortabschluss.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Kosten]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Was kostet die Trockenlegung nasser Wände?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>Kosten Mauertrockenlegung]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Die Kosten hängen von Ursache, Wandstärke und Verfahren ab. Seriöse Betriebe nennen einen Preis erst nach der Vor-Ort-Analyse – schriftlich und als Festpreis.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Ursache]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Muss die Ursache vor der Sanierung bekannt sein?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>Ursache nasse Wände bestimmen]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Ja. Nasse Wände haben mehrere mögliche Ursachen. Ohne messtechnische Analyse ist die Methodenwahl ein Ratespiel.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Bewertungen]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Wie aussagekräftig sind Online-Bewertungen?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>Bewertungen Sanierungsbetrieb prüfen]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Achten Sie auf konstante Bewertungen über Jahre und konkrete Fallbeschreibungen – nicht nur auf die Durchschnittsnote.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Garantie]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Welche Garantie sollte ein Betrieb geben?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>Garantie Mauertrockenlegung]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Wichtig ist eine schriftliche Produktgarantie auf die Wirksamkeit der Sperre, getrennt von der gesetzlichen Gewährleistung.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Angebote]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Wie viele Angebote sollte ich einholen?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>Angebote vergleichen Trockenlegung]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Zwei bis drei vergleichbare Festpreisangebote sind sinnvoll. Achten Sie darauf, dass alle dieselbe Leistung beschreiben.]]>
                    </TextBox>
                </Container>

                <Container background_color="#ffffff" padding="22px 24px" border_radius="14px" border_style="1px solid #eceef0" custom_css="box-shadow:0 4px 16px rgba(7,7,26,0.05);">
                    <Container background_color="#E57D1E" padding="2px 8px" border_radius="8px" width="fit-content" custom_css="display:inline-block;margin-bottom:11px;">
                        <TextBox font_family="inherit" font_size="9px" font_color="#ffffff" text_align="left" font_weight="700" custom_css="text-transform:uppercase;letter-spacing:0.06em;">
<![CDATA[Lokal]]>
                        </TextBox>
                    </Container>
                    <TextBox font_family="inherit" font_size="1.08rem" font_color="#07071a" text_align="left" font_weight="700" custom_css="line-height:1.35;margin-bottom:8px;letter-spacing:-0.01em;">
<![CDATA[Warum ist ein regionaler Betrieb von Vorteil?]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="12.5px" font_color="#6a7060" text_align="left" font_weight="600" custom_css="margin-bottom:11px;line-height:1.45;">
<![CDATA[<span style="display:inline-block;font-size:9px;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:#4f9a12;background:#eef6dd;border:1px solid #d6e9b0;padding:2px 7px;border-radius:9px;margin-right:7px;">Auch gesucht als</span>regionaler Fachbetrieb nasse Wände]]>
                    </TextBox>
                    <TextBox font_family="inherit" font_size="15px" font_color="#43483d" text_align="left" font_weight="normal" custom_css="line-height:1.7;">
<![CDATA[Ein regionaler Betrieb ist schneller vor Ort, besser erreichbar und im Garantiefall greifbar.]]>
                    </TextBox>
                </Container>

            </Grid>
        </Container>
    </Section>

</WebEditor>
+10 −8
Changes for editor/src/webedit_db.cpp: 10 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ void ensureSqliteDbDirectory(const std::string &connection) {

} // namespace

webedit::Database::Database(const std::string &driver, const std::string &connection) {
webedit::Database::Database(const std::string &driver, const std::string &connection)
    : _driver(driver) {
    if (driver == "sqlite") {
        ensureSqliteDbDirectory(connection);
    }
@@ -73,6 +74,7 @@ webedit::Database::~Database() {
void webedit::Database::initTables() {
    dbpp::SQL sql;
    dbpp::DBResult res;
    const std::string longTextType = (_driver == "mysql") ? "longtext" : "text";
    const std::string keyColumn = dbpp::quoteIdentifier(*_db, "key");
    dbpp::SQL uuidTypeSql;
    const dbpp::SQL uuidType = _db->getUUIDType(uuidTypeSql);
@@ -83,7 +85,7 @@ void webedit::Database::initTables() {
        <<   "domain varchar(255) NOT NULL DEFAULT '',"
        <<   "group_name varchar(255) NOT NULL DEFAULT '',"
        <<   "name varchar(255) NOT NULL,"
        <<   "xml text NOT NULL,"
        <<   "xml " << longTextType << " NOT NULL,"
        <<   "created timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "modified timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "PRIMARY KEY (id)"
@@ -96,7 +98,7 @@ void webedit::Database::initTables() {

    sql << "CREATE TABLE IF NOT EXISTS session("
        <<   "id " << uuidType << ","
        <<   "useragent text,"
        <<   "useragent " << longTextType << ","
        <<   "created timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "PRIMARY KEY (id)"
        << ");";
@@ -109,7 +111,7 @@ void webedit::Database::initTables() {
    sql << "CREATE TABLE IF NOT EXISTS session_data("
        <<   "sessionid " << uuidType << ","
        <<   keyColumn << " varchar(255),"
        <<   "value text,"
        <<   "value " << longTextType << ","
        <<   "FOREIGN KEY (sessionid) REFERENCES session (id)"
        << ");";

@@ -123,7 +125,7 @@ void webedit::Database::initTables() {
        <<   "document_id " << uuidType << " NOT NULL,"
        <<   "revision integer NOT NULL,"
        <<   "name varchar(255) NOT NULL,"
        <<   "xml text NOT NULL,"
        <<   "xml " << longTextType << " NOT NULL,"
        <<   "author varchar(255) DEFAULT '',"
        <<   "created timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "PRIMARY KEY (id),"
@@ -138,7 +140,7 @@ void webedit::Database::initTables() {
    sql << "CREATE TABLE IF NOT EXISTS options("
        <<   "id " << uuidType << ","
        <<   keyColumn << " varchar(255) UNIQUE NOT NULL,"
        <<   "value text NOT NULL,"
        <<   "value " << longTextType << " NOT NULL,"
        <<   "PRIMARY KEY (id)"
        << ");";

@@ -152,7 +154,7 @@ void webedit::Database::initTables() {
        <<   "owner_uid varchar(255) NOT NULL,"
        <<   "name varchar(255) NOT NULL,"
        <<   "group_name varchar(255) DEFAULT '',"
        <<   "url text NOT NULL,"
        <<   "url " << longTextType << " NOT NULL,"
        <<   "ignore_ssl integer DEFAULT 0,"
        <<   "created timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "PRIMARY KEY (id)"
@@ -165,7 +167,7 @@ void webedit::Database::initTables() {

    sql << "CREATE TABLE IF NOT EXISTS ai_chat_messages("
        <<   "owner_uid varchar(255) NOT NULL,"
        <<   "messages text NOT NULL,"
        <<   "messages " << longTextType << " NOT NULL,"
        <<   "modified timestamp DEFAULT CURRENT_TIMESTAMP,"
        <<   "PRIMARY KEY (owner_uid)"
        << ");";
+1 −0
Changes for editor/src/webedit_db.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ namespace webedit {
        dbpp::ReplicatedDatabase &getDb() { return *_db; }

    private:
        std::string _driver;
        std::unique_ptr<dbpp::ReplicatedDatabase> _db;
    };

+3 −2
Changes for plugins/content/content.cpp: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -1826,11 +1826,12 @@ std::cerr << "DEBUG: authid=" << authid << " currentAuthor=" << currentAuthor <<
            dbpp::DBResult res;
            dbpp::SQL uuidTypeSql;
            const dbpp::SQL uuidType = Args->database[0]->getUUIDType(uuidTypeSql);
            const std::string longTextType = (Args->config->getdbdriver() == "mysql") ? "longtext" : "text";
            sql << "CREATE TABLE IF NOT EXISTS content ("
                <<   "id " << uuidType << " PRIMARY KEY,"
                <<     "title character varying(255) NOT NULL UNIQUE,"
                <<     "slug character varying(255) NOT NULL DEFAULT '',"
                <<     "text text NOT NULL,"
                <<     "text " << longTextType << " NOT NULL,"
                <<     "descrition character varying(255) NOT NULL,"
                <<     "author " << uuidType << ","
                <<     "created date NOT NULL,"
@@ -1864,7 +1865,7 @@ std::cerr << "DEBUG: authid=" << authid << " currentAuthor=" << currentAuthor <<
                <<   "user_id " << uuidType << ","
                <<   "author_name character varying(255) NOT NULL,"
                <<   "email character varying(255),"
                <<   "text text NOT NULL,"
                <<   "text " << longTextType << " NOT NULL,"
                <<   "created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,"
                <<   "approved boolean NOT NULL DEFAULT false,"
                <<   "email_verified boolean NOT NULL DEFAULT false,"
Loading