
| Current Path : /var/www/html/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/drupal10.pyy |
import os, sys, re
site = sys.argv[1]
passwd = "k1o2n3v4a5l6o7"
try:
steps = sys.argv[2]
except:
steps = "01"
print(steps)
thname = "atstandard"
''' # Info. Geht aber nicht alles
drush site:install standard --account-name=admin --account-pass=admin --site-name="$SITE" --yes
drush en -y ckeditor5 locale language content_translation config_translation menu_ui
drush language:add de
echo "Install AdaptiveTheme..."
composer require drupal/adaptivetheme
drush en adaptivetheme -y
drush generate adaptivetheme:subtheme --name="$THEME" --machine-name="$THEME" --base-theme="at_core"
drush theme:enable $THEME
drush config:set system.theme default $THEME -y
drush config:set $THEME.settings logo.url "themes/$THEME/logo.svg" -y
drush config:set $THEME.settings favicon.url "themes/$THEME/favicon.ico" -y
drush block:disable system_breadcrumb_block
drush block:disable system_menu_block:account
drush menu:link:create main "Home" --uri=/ --weight=-10
drush menu:link:create main "Product" --uri=/product
drush menu:link:create main "Contact" --uri=/contact
drush menu:link:create main "Legal notice" --uri=/legal
drush node:create page --title="Home" --body="<h1>Welcome</h1>" --path="/"
drush node:create page --title="Product" --body="<h1>Product</h1>" --path="/product"
drush node:create page --title="Contact" --body="<h1>Contact</h1>" --path="/contact"
drush node:create page --title="Legal notice" --body="<h1>Legal notice</h1>" --path="/legal"
drush config:set editor.editor.basic_html settings.toolbar.items "['heading','bold','italic','link','bulletedList','numberedList']" -y
drush config:set system.site page.front "/node/1" -y
drush cr
drush uli
'''
if "0" in steps: # Installation der Software mit composer
print("Create project")
os.system("COMPOSER_ALLOW_SUPERUSER=1 php composer.phar create-project drupal/recommended-project:10.x " + site)
os.chdir(site)
print("Install drush")
os.system('''
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require --with-all-dependencies drush/drush:^12
''')
print("Install modules")
os.system('''
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/at_theme drupal/at_tool drupal/at_core
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/bootstrap drupal/colorbutton drupal/panelbutton drupal/token
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/metatag drupal/redirect drupal/visitors drupal/config_delete
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/entity_export_csv:2.x-dev drupal/csv_importer drupal/color
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/simple_sitemap drupal/honeypot drupal/webform drupal/pathauto
COMPOSER_ALLOW_SUPERUSER=1 php ../composer.phar require -W drupal/ckeditor5_plugin_pack drupal/redirect
''')
os.system("mkdir -p web/sites/default/files")
os.system("mkdir -p web/sites/default/files/inline-images")
os.system("sudo chown -R www-data:www-data ../" + site)
os.system("sudo chmod -R 775 sites/default/files")
if "1" in steps: # Einrichten der Drpual-Site
os.system("mkdir -p web/sites/default/files")
os.system("sudo chown -R www-data:www-data ../" + site)
os.system("sudo chmod -R 775 sites/default/files")
print("Install Drupal")
os.system("vendor/bin/drush site:install standard --db-url=sqlite://sites/default/files/sqlitedb.sqlite --yes --account-name=admin --account-pass=" + passwd + " --site-name=" + site)
os.system("sudo chown -R www-data:www-data ../" + site)
os.system("sudo chmod -R 775 sites/default/files")
print("Enable modules")
os.system("vendor/bin/drush en at_theme_generator -y")
os.system("vendor/bin/drush en at_tool -y")
os.system("vendor/bin/drush en token -y")
os.system("vendor/bin/drush en pathauto -y")
os.system("vendor/bin/drush en metatag -y")
os.system("vendor/bin/drush en simple_sitemap -y")
os.system("vendor/bin/drush en honeypot -y")
os.system("vendor/bin/drush en redirect -y")
os.system("vendor/bin/drush en webform -y")
os.system("vendor/bin/drush en locale -y")
os.system("vendor/bin/drush en language -y")
os.system("vendor/bin/drush en content_translation -y")
os.system("vendor/bin/drush en config_translation -y")
os.system("vendor/bin/drush en redirect -y")
os.system("vendor/bin/drush en visitors -y")
os.system("vendor/bin/drush en visitors_geoip -y")
os.system("vendor/bin/drush en csv_importer -y")
os.system("vendor/bin/drush en entity_export_csv -y")
os.system("vendor/bin/drush en color -y")
os.system("vendor/bin/drush en ckeditor5_plugin_pack -y")
os.system("vendor/bin/drush en ckeditor5_plugin_pack_font -y")
text = open("web/themes/contrib/at_theme/at_core/forms/color/color_submit.php").read() # Fehler Fix
text = re.sub(r"There is not enough memory.*?\n","not enough memory'));\n",text)
text = re.sub(r"new CssOptimizer\(\)","\\\\Drupal::service('asset.css.optimizer')",text)
open("web/themes/contrib/at_theme/at_core/forms/color/color_submit.php","w").write(text)
if "2" in steps: # Sprachen einrichten
print("Add languages")
for lang in ("en","de","fr"):
os.system("vendor/bin/drush language:add " + lang)
if "3" in steps: # SEO und Theme einrichten
print("SEO Optimizing")
os.system("vendor/bin/drush config:set simple_sitemap.settings regenerate true -y") # Sitemap-Aktualisierung, fuer SEO
os.system("vendor/bin/drush config:set metatag.settings entity_canonical_url 1 -y") # Canonical URLs, fuer SEO
os.system("vendor/bin/drush config:set redirect.settings enforce_clean_urls 1 -y") # No trailing slashs, fuer SEO
os.system("vendor/bin/drush config:set redirect.settings enforce_clean_urls 1 -y") # No trailing slashs, fuer SEO
print("Install theme")
os.system("cp -a ../" + thname + " web/themes")
os.system("cp ../pics/* web/sites/default/files")
os.system("cp ../pics/logo.svg web/themes/" + thname)
os.system("cp ../pics/logo.png web/themes/" + thname)
os.system("cp ../pics/favicon.ico web/themes/" + thname)
os.system("sudo chown -R www-data:www-data ../" + site)
print("Enable theme")
os.system("vendor/bin/drush theme:enable at_core -y")
os.system("vendor/bin/drush theme:enable " + thname + " -y")
os.system("vendor/bin/drush config:set system.theme default " + thname + " -y")
print("CKEditor konfigurieren")
if "4" in steps: # Einstellungen fuer CKEditor setzen
os.system('''vendor/bin/drush config:delete editor.editor.full_html -y''')
os.system('''
vendor/bin/drush php:eval "
use Drupal\editor\Entity\Editor;
\$e = Editor::create([
'format' => 'full_html',
'editor' => 'ckeditor5',
'settings' => [
'toolbar' => [
'items' => [
// 'style', // style nicht, weil Style definiert werden muss
// 'imageUpload', // imageUpload nicht, weil komplexere Struktur, besser ueber UI
'heading',
'bold','italic','underline',
'strikethrough','specialCharacters','subscript','superscript',
'code','sourceEditing','codeBlock','horizontalLine',
'link','showBlocks',
'alignment','removeFormat','textPartLanguage',
'bulletedList','numberedList','blockQuote','insertTable',
'undo','redo','indent','outdent',
'fontFamily','fontSize','fontColor','fontBackgroundColor']
],
// 'image_upload' => [
// 'status' => TRUE,
// 'scheme' => 'public',
// 'directory' => 'inline-images',
// ]
]
]);
\$e->save();
"
''')
os.system("vendor/bin/drush config:set filter.format.full_html filters.filter_html.settings.allowed_html " +
"'<p> <a> <strong> <em> <h1> <h2> <h3> <h4> <h5> <h6> <ul> <ol> <li> <blockquote> <img> <table> <tr> <td> <th> <span> <div> <br> <hr>' -y")
os.system("vendor/bin/drush config:set filter.format.full_html status true -y")
os.system('''vendor/bin/drush config:delete editor.editor.restricted_html -y''')
os.system('''
vendor/bin/drush php:eval "
use Drupal\editor\Entity\Editor;
\$e = Editor::create([
'format' => 'restricted_html',
'editor' => 'ckeditor5',
'settings' => [
'toolbar' => [
'items' => [
// 'style', // style nicht, weil Style definiert werden muss
// 'imageUpload', // imageUpload nicht, weil komplexere Struktur, besser ueber UI
'heading',
'bold','italic','underline',
// 'strikethrough','specialCharacters','subscript','superscript',
// 'code','sourceEditing','codeBlock','horizontalLine',
'link','showBlocks',
'alignment','removeFormat','textPartLanguage',
// 'bulletedList','numberedList','blockQuote','insertTable',
'undo','redo','indent','outdent',
'fontFamily','fontSize','fontColor','fontBackgroundColor']
],
// 'image_upload' => [
// 'status' => TRUE,
// 'scheme' => 'public',
// 'directory' => 'inline-images',
// ]
]
]);
\$e->save();
"
''')
print("This is not a real error. It is because the restricted profile did not exist. Skipü the error message.")
os.system("vendor/bin/drush config:set filter.format.restricted_html filters.filter_html.settings.allowed_html " +
"'<p> <a> <strong> <em> <h1> <h2> <h3> <h4> <h5> <h6> <ul> <ol> <li> <blockquote> <img> <table> <tr> <td> <th> <span> <div> <br> <hr>' -y")
os.system("vendor/bin/drush config:set filter.format.restricted_html status true -y")
os.system('''vendor/bin/drush config:delete editor.editor.basic_html -y''')
os.system('''
vendor/bin/drush php:eval "
use Drupal\editor\Entity\Editor;
\$e = Editor::create([
'format' => 'basic_html',
'editor' => 'ckeditor5',
'settings' => [
'toolbar' => [
'items' => [
// 'style', // style nicht, weil Style definiert werden muss
// 'imageUpload', // imageUpload nicht, weil komplexere Struktur, besser ueber UI
'heading',
'bold','italic','underline',
// 'strikethrough','specialCharacters','subscript','superscript',
// 'code','sourceEditing','codeBlock','horizontalLine',
'link','showBlocks',
'alignment','removeFormat','textPartLanguage',
// 'bulletedList','numberedList','blockQuote','insertTable',
'undo','redo','indent','outdent',
'fontFamily','fontSize','fontColor','fontBackgroundColor']
],
// 'image_upload' => [
// 'status' => TRUE,
// 'scheme' => 'public',
// 'directory' => 'inline-images',
// ]
]
]);
\$e->save();
"
''')
os.system("vendor/bin/drush config:set filter.format.basic_html filters.filter_html.settings.allowed_html " +
"'<p> <a> <strong> <em> <h1> <h2> <h3> <h4> <h5> <h6> <ul> <ol> <li> <blockquote> <img> <table> <tr> <td> <th> <span> <div> <br> <hr>' -y")
os.system("vendor/bin/drush config:set filter.format.basic_html status true -y")
if "5" in steps: # Bloecke setzen bzw loeschen
print("Define Blocks.")
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_page_title' ); \$b->setRegion('none' ); \$b->save();" -y''') # Page title
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_branding' ); \$b->setRegion('none' ); \$b->save();" -y''') # Site title, Logo
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_messages' ); \$b->setRegion('none' ); \$b->save();" -y''') # Error messages
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_search' ); \$b->setRegion('none' ); \$b->save();" -y''') # Search Form
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_account_menu' ); \$b->setRegion('none' ); \$b->save();" -y''') # Login Menue
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_breadcrumbs' ); \$b->setRegion('none' ); \$b->save();" -y''') # Breadcrumbs
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_local_tasks' ); \$b->setRegion('none' ); \$b->save();" -y''') # Pages edit / view / Translate Menue
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_help' ); \$b->setRegion('none' ); \$b->save();" -y''') # Help
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_local_actions' ); \$b->setRegion('none' ); \$b->save();" -y''') # Admin actions
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_content' ); \$b->setRegion('none' ); \$b->save();" -y''') # Main content
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_tools' ); \$b->setRegion('none' ); \$b->save();" -y''') # Tools
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_login' ); \$b->setRegion('none' ); \$b->save();" -y''') # User Login
os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_login' ); \$b->setVisibilityConfig('request_path',['id'=>'request_path','pages'=>'/lgnift']); \$b->save();" -y''')
# os.system('''vendor/bin/drush php:eval "\$b=\Drupal\\block\Entity\Block::load(''' + "'" + thname + '''_searchform' ); \$b->setRegion('none' ); \$b->save();" -y''') # Footer menue
# os.system("vendor/bin/drush config:setdrush php:eval "\$role = \Drupal\user\Entity\Role::load('authenticated');
# \$role->grantPermission('use text format full_html');
#\$role->save();
#"
#drush php:eval "
#\$role = \Drupal\user\Entity\Role::load('authenticated');
#\$role->grantPermission('use text format full_html');
#\$role->save();
#"
#drush php:eval "
#\Drupal\block\Entity\Block::create([
# 'id' => 'main_menu',
# 'plugin' => 'system_menu_block:main',
# 'region' => 'header',
# 'theme' => 'atstandard',
# 'visibility' => [],
# 'weight' => 0,
#])->save();
#"
#drush php:eval "
#\$block = \Drupal::entityTypeManager()
# ->getStorage('block')
# ->load('user_menu');
#
#\$block->setVisibilityConfig('request_path', [
# 'id' => 'request_path',
# 'pages' => '/account',
# 'negate' => FALSE,
#]);
#
#\$block->save();
#"
# os.system("vendor/bin/drush ev '\\Drupal::entityTypeManager()->getStorage(\"redirect\")->create([\"redirect_source\" => [\"path\" => \"/user/login\"], " +
# "\"redirect_redirect\" => [\"uri\" => \"internal:/lgnift\"], \"status_code\" => 302, ])->save();'")
if "6" in steps: # Colors for theme
# os.system("vendor/bin/drush config:delete color.theme." + name + " -y")
# os.system("vendor/bin/drush config:set " + name + ".settings logo.use_default false -y")
# os.system("vendor/bin/drush config:set " + name + ".settings favicon.use_default false -y")
# os.system("vendor/bin/drush config:set " + name + ".settings logo.path '/themes/" + name + "/logo.svg' -y")
# os.system("vendor/bin/drush config:set " + name + ".settings favicon.path '/themes/" + name + "/favicon.ico' -y")
os.system("vendor/bin/drush config:set color.theme." + thname + " palette.base '#220088' -y")
os.system("vendor/bin/drush config:set color.theme." + thname + " palette.text '#000000' -y")
os.system("vendor/bin/drush config:set color.theme." + thname + " palette.link '#2200cc' -y")
# os.system("vendor/bin/drush ev '\\Drupal::service(\"theme_handler\"); module_load_include(\"inc\",\"color\",\"color\");_rebuild(\"atstandard\");'")
# os.system("vendor/bin/drush config:set " + name + ".settings color_primary '#220088' -y")
# os.system("vendor/bin/drush config:set " + name + ".settings color_text '#000000' -y")
# os.system("vendor/bin/drush config:set " + name + ".settings color_link '#2200cc' -y")
# os.system("vendor/bin/drush config:set at.settings." + name + " color_primary '#220088' -y")
# os.system("vendor/bin/drush config:set at.settings." + name + " color_text '#000000' -y")
# os.system("vendor/bin/drush config:set at.settings." + name + " color_link '#2200cc' -y")
# os.system("vendor/bin/drush color:rebuild " + name + " -y")
# os.system("vendor/bin/drush config:set " + name + ".settings logo.use_default true -y")
print("Rebuild cache")
os.system("vendor/bin/drush cr")
#----------------------------------------------------------------
# Pages
cmd_def = '''
/*<?php*/
use Drupal\\node\\Entity\\Node;
use Drupal\\menu_link_content\\Entity\\MenuLinkContent;
/* helper */
function create_page($title,$alias,$html){
$node = Node::create([
"type"=>"page",
"title"=>$title,
"body"=>[
"value"=>$html,
"format"=>"full_html"
],
"status"=>1
]);
$node->save();
\\Drupal\\path_alias\\Entity\\PathAlias::create([
"path"=>"/node/".$node->id(),
"alias"=>$alias
])->save();
return $node;
}
function add_menu($title,$node,$weight,$parent=null){
$link = [
"title"=>$title,
"link"=>["uri"=>"entity:node/".$node->id()],
"menu_name"=>"main",
"weight"=>$weight
];
if($parent){
$link["parent"]=$parent;
}
$m = MenuLinkContent::create($link);
$m->save();
return $m->getPluginId();
}
function find_page($alias){
$path = \\Drupal::service("path_alias.manager")->getPathByAlias($alias);
$nid = str_replace("/node/","",$path);
$node = \\Drupal\\node\\Entity\\Node::load($nid);
return($node);
}
'''
#----------------------------------------------------------------
if "7" in steps: # Pages einrichten
print("Create pages")
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$lgnift = create_page("Login","/lgnift","User Login."); ' ''') # Login-Seite
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$home = create_page("Home","/home","Home."); \\Drupal::configFactory()->getEditable("system.site")->set("page.front","/home")->save();' ''')
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$product = create_page("Product","/product","Product."); $pr_menu = add_menu("Product",$product,10); ' ''')
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$howitworks = create_page("How it works","/howitworks","How it works."); $how_menu = add_menu("How it works",$howitworks,20); ' ''')
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$usecases = create_page("Use cases","/usecases","Use cases."); $use_menu = add_menu("Use cases",$usecases,30); ' ''')
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$demo = create_page("Demo","/demo","Demo."); $demo_menu = add_menu("Demo",$demo,40); ' ''')
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$legal = create_page("Legal notice","/legal","Legal notice."); $legal_menu = add_menu("Legal notice",$legal,50); ''' +
'''$info = create_page("Info","/info","Info."); $info_menu = add_menu("Info",$info,10,$legal_menu); ' ''')
os.system("vendor/bin/drush cr")
#----------------------------------------------------------------
if "8" in steps: # Pages einrichten
print("Redirect.")
os.system('''vendor/bin/drush php:eval "
use Drupal\\redirect\Entity\Redirect;
Redirect::create([
'redirect_source' => ['path' => '/user'],
'redirect_redirect' => ['uri' => 'internal:/'],
'status_code' => 301,
])->save();
Redirect::create([
'redirect_source' => ['path' => '/user/login'],
'redirect_redirect' => ['uri' => 'internal:/'],
'status_code' => 301,
])->save();
"
''')
#----------------------------------------------------------------
if "9" in steps: # Main-Page aendern
os.system('''vendor/bin/drush php:eval ' ''' + cmd_def + '''$pg = find_page("/home"); $pg->body->format = "full_html"; $pg->title->value = " "; $pg->body->value = ' ''' + '''
<div style="background:#87c7e8 url('/sites/default/files/wolken.png') repeat; padding:120px 20px; text-align:center;">
<div style="max-width:900px;margin:0 auto;font-family:Arial, Helvetica, sans-serif;color:#243b53;line-height:1.7;">
<!-- große Wolke mit Grafik -->
<div style="display:inline-block;background:white;padding:90px 110px;border-radius:220px;box-shadow:0 20px 60px rgba(0,0,0,0.08);margin-bottom:70px;">
<img src="/sites/default/files/grafik_konvalo.png" style="max-width:520px;width:100%;height:auto;">
</div>
<!-- HEADLINE -->
<div style="font-size:54px;font-weight:700;color:#1e3a8a;margin-bottom:30px;">
Continuous Consolidation. At your fingertips.
</div>
<div style="font-size:28px;margin-bottom:50px;">
Accounting and consolidation for modern companies.
</div>
<!-- INTRO -->
<div style="font-size:20px;margin-bottom:60px;">
Konvalo enables continuous reconciliation and financial consolidation across company ledgers.
</div>
<!-- BUTTONS -->
<div style="margin-bottom:90px;">
<a href="/contact" style="display:inline-block;background:#1e3a8a;color:white;padding:14px 28px;text-decoration:none;font-size:18px;border-radius:6px;margin-right:15px;">
Request Demo
</a>
<a href="#learnmore" style="display:inline-block;background:white;color:#1e3a8a;padding:14px 28px;text-decoration:none;font-size:18px;border-radius:6px;border:2px solid #1e3a8a;">
Learn more
</a>
</div>
<!-- CHALLENGE -->
<div id="learnmore" style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The challenge
</div>
<div style="font-size:20px;margin-bottom:20px;">
Financial data is fragmented.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Companies operate multiple accounting systems across legal entities.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Intercompany reconciliation and financial consolidation are slow, manual and often spreadsheet-driven.
</div>
<div style="font-size:20px;margin-bottom:70px;">
Month-end closing can take weeks.
</div>
<!-- SOLUTION -->
<div style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The solution
</div>
<div style="font-size:22px;margin-bottom:20px;">
Continuous consolidation.
</div>
<div style="font-size:20px;margin-bottom:60px;">
Konvalo connects company ledgers and continuously reconciles financial data.
</div>
<!-- FEATURES -->
<div style="font-size:20px;margin-bottom:70px;">
automated reconciliation<br>
continuous consolidation<br>
real-time financial visibility
</div>
<!-- PRODUCT -->
<div style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The product
</div>
<div style="font-size:20px;margin-bottom:20px;">
Built for modern finance teams.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Konvalo provides:
</div>
<div style="font-size:20px;margin-bottom:60px;">
multi-company accounting<br>
intercompany reconciliation<br>
financial consolidation<br>
multi-currency support<br>
real-time financial reporting
</div>
<!-- FOOTER -->
<div style="font-size:20px;margin-bottom:20px;">
Start using Konvalo.
</div>
<div style="font-size:18px;">
Konvalo. Continuous consolidation for modern companies.
Powered by <a href="/strat" style="color:#1e3a8a;text-decoration:none;font-weight:600;">STRAT</a>.
</div>
</div>
</div
''' + ''' '; $pg->save();' ''')
#----------------------------------------------------------------
if "A" in steps: # Pages aendern
cmd1 = '''
$text = <<<HTML
<div style="background-color:#87c7e8; background-image:url('/sites/default/files/wolken.png'); background-repeat:repeat; min-height:100vh; padding: 40px;")
<div style="background:#eeeeee;">
<div class="text-align-center" style="font-size: 33px;">Continuous Consolidation. At your fingertips</h5>
<div class="text-align-center" style="font-size: 28px;"><br><em>Accounting and consolidation for modern companies.</em></h6>
</div>
<p class="text-align-center"><br>Konvalo enables continuous reconciliation and financial consolidation across company ledgers.</p>
<img src="/sites/default/files/grafik_konvalo.png" data-align="center" data-entity-type="file" alt="Continuous Consolidation" width="476" height="317">
<p class="text-align-center"><br>Request Demo Learn more</p>
<p>[Grafik]</p><p> </p>
<p><br>The challenge:</p><p>Financial data is fragmented.</p>
<p>Companies operate multiple accounting systems across legal entities.</p>
<p>Intercompany reconciliation and financial consolidation are slow,
<br>manual and often spreadsheet-driven.</p>
<p>Month-end closing can take weeks.</p>
<p><br>The solution:</p>
<p>Continuous consolidation.</p>
<p>Konvalo connects company ledgers and continuously reconciles financial data.</p>
<p>Results:</p>
<p>
• automated reconciliation<br>
• continuous consolidation<br>
• real-time financial visibility</p>
<p><br>The product:</p>
<p>Buildt for modern finance teams.</p>
<p>Konvalo provides:</p>
<p>
• multi-company accounting<br>
• intercompany reconciliation<br>
• financial consolidation<br>
• multi-currency support<br>
• real-time financial reporting</p>
<p>Start using Konvalo.</p>
<p>Konvalo. Continuous consolidation for modern companies. Powered by STRAT.</p>
<p>
<br>[Request Demo]</p>
<p> </p><p> </p>
</div>
HTML;
$pg = find_page("/home");
$pg->title->value = " ";
$pg->body->value = $text;
$pg->body->format = 'full_html';
$pg->save();
'''
cmd1 = '''
$text = <<<HTML
<style>
/* Base */
body{
margin:0;
font-family:Arial, Helvetica, sans-serif;
line-height:1.6;
color:#333;
}
/* Layout */
.container{
max-width:1100px;
margin:auto;
padding:20px;
}
.section{
padding:80px 20px;
}
/* Flex layout */
.row{
display:flex;
flex-wrap:wrap;
gap:30px;
}
.col{
flex:1 1 300px;
}
/* Alignment */
.center{
text-align:center;
}
.left{
text-align:left;
}
/* Typography */
.h1{
font-size:clamp(36px,5vw,54px);
font-weight:600;
}
.h2{
font-size:clamp(26px,3vw,36px);
}
.text-large{
font-size:20px;
}
.text-small{
font-size:14px;
}
.text-muted{
color:#666;
}
/* Spacing */
.mt{
margin-top:40px;
}
.mb{
margin-bottom:40px;
}
.p{
padding:20px;
}
/* Backgrounds */
.bg-white{
background:white;
}
.bg-light{
background:#f5f5f5;
}
.bg-sky{
background:#87c7e8;
}
.bg-clouds{
background:#87c7e8 url('/sites/default/files/wolken.png') repeat;
}
/* Hero */
.hero{
padding:120px 20px;
}
/* Images */
.img{
max-width:100%;
height:auto;
}
/* Buttons */
.btn{
display:inline-block;
padding:12px 22px;
background:#2a6df4;
color:white;
text-decoration:none;
border-radius:4px;
}
</style>
<div class="hero bg-clouds center">
<div class="container">
<h1 class="h1">Konvalo</h1>
<p class="text-large">
Continuous consolidation at your fingertips
</p>
</div>
</div>
<div class="section bg-white">
<div class="container">
<h2 class="h2 center">The challenge</h2>
<div class="row mt">
<div class="col">
<p>Financial data is fragmented across systems.</p>
</div>
<div class="col">
<p>Manual reconciliation slows down reporting.</p>
</div>
<div class="col">
<p>Organizations lack real-time visibility.</p>
</div>
</div>
</div>
</div>
<div class="section bg-light center">
<div class="container">
<h2 class="h2">The solution</h2>
<p class="text-large">
Continuous consolidation.
</p>
</div>
</div>
HTML;
$pg = find_page("/home");
$pg->title->value = " ";
$pg->body->value = $text;
$pg->body->format = 'full_html';
$pg->save();
'''
cmd1 = '''
$text = <<<HTML
<div style="background:#a9d8f3 url('/sites/default/files/wolken.png') repeat; min-height:100vh; padding:80px 20px 100px 20px; box-sizing:border-box;">
<div style="max-width:900px; margin:0 auto; text-align:center;">
<div style="font-family:Arial, Helvetica, sans-serif; font-size:56px; line-height:1.1; font-weight:700; color:#1e3a8a; margin-bottom:40px;">
Konvalo
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:28px; line-height:1.4; color:#234; margin-bottom:30px;">
Continuous consolidation at your fingertips.
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:22px; line-height:1.6; color:#234; margin-bottom:60px;">
Real-time financial visibility across entities.<br>
No reconciliation delays.<br>
No fragmented reporting.
</div>
<div style="margin-bottom:70px;">
<img src="/sites/default/files/grafik_konvalo.png" style="max-width:100%; height:auto; border:0;" alt="">
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:34px; line-height:1.3; font-weight:600; color:#1e3a8a; margin-bottom:25px;">
Why accounting is still slow
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:20px; line-height:1.7; color:#234; margin-bottom:60px;">
Financial data is fragmented across systems.<br>
Intercompany reconciliation is manual.<br>
Group numbers are often outdated before they are available.
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:34px; line-height:1.3; font-weight:600; color:#1e3a8a; margin-bottom:25px;">
The solution
</div>
<div style="font-family:Arial, Helvetica, sans-serif; font-size:22px; line-height:1.7; color:#234; margin-bottom:0;">
STRAT synchronizes accounting across entities<br>
so consolidation happens continuously<br>
instead of at month end.
</div>
</div>
</div>
HTML;
$pg = find_page("/home");
$pg->title->value = " ";
$pg->body->value = $text;
$pg->body->format = 'full_html';
$pg->save();
'''
cmd1 = '''
$text = <<<HTML
<div style="background:#87c7e8 url('/sites/default/files/wolken.png') repeat; padding:120px 20px; text-align:center;">
<div style="max-width:900px;margin:0 auto;font-family:Arial, Helvetica, sans-serif;color:#243b53;line-height:1.7;">
<!-- große Wolke mit Grafik -->
<div style="display:inline-block;background:white;padding:90px 110px;border-radius:220px;box-shadow:0 20px 60px rgba(0,0,0,0.08);margin-bottom:70px;">
<img src="/sites/default/files/grafik_konvalo.png" style="max-width:520px;width:100%;height:auto;">
</div>
<!-- HEADLINE -->
<div style="font-size:54px;font-weight:700;color:#1e3a8a;margin-bottom:30px;">
Continuous Consolidation. At your fingertips.
</div>
<div style="font-size:28px;margin-bottom:50px;">
Accounting and consolidation for modern companies.
</div>
<!-- INTRO -->
<div style="font-size:20px;margin-bottom:60px;">
Konvalo enables continuous reconciliation and financial consolidation across company ledgers.
</div>
<!-- BUTTONS -->
<div style="margin-bottom:90px;">
<a href="/contact" style="display:inline-block;background:#1e3a8a;color:white;padding:14px 28px;text-decoration:none;font-size:18px;border-radius:6px;margin-right:15px;">
Request Demo
</a>
<a href="#learnmore" style="display:inline-block;background:white;color:#1e3a8a;padding:14px 28px;text-decoration:none;font-size:18px;border-radius:6px;border:2px solid #1e3a8a;">
Learn more
</a>
</div>
<!-- CHALLENGE -->
<div id="learnmore" style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The challenge
</div>
<div style="font-size:20px;margin-bottom:20px;">
Financial data is fragmented.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Companies operate multiple accounting systems across legal entities.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Intercompany reconciliation and financial consolidation are slow, manual and often spreadsheet-driven.
</div>
<div style="font-size:20px;margin-bottom:70px;">
Month-end closing can take weeks.
</div>
<!-- SOLUTION -->
<div style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The solution
</div>
<div style="font-size:22px;margin-bottom:20px;">
Continuous consolidation.
</div>
<div style="font-size:20px;margin-bottom:60px;">
Konvalo connects company ledgers and continuously reconciles financial data.
</div>
<!-- FEATURES -->
<div style="font-size:20px;margin-bottom:70px;">
automated reconciliation<br>
continuous consolidation<br>
real-time financial visibility
</div>
<!-- PRODUCT -->
<div style="font-size:34px;font-weight:600;color:#1e3a8a;margin-bottom:25px;">
The product
</div>
<div style="font-size:20px;margin-bottom:20px;">
Built for modern finance teams.
</div>
<div style="font-size:20px;margin-bottom:20px;">
Konvalo provides:
</div>
<div style="font-size:20px;margin-bottom:60px;">
multi-company accounting<br>
intercompany reconciliation<br>
financial consolidation<br>
multi-currency support<br>
real-time financial reporting
</div>
<!-- FOOTER -->
<div style="font-size:20px;margin-bottom:20px;">
Start using Konvalo.
</div>
<div style="font-size:18px;">
Konvalo. Continuous consolidation for modern companies.
Powered by <a href="/strat" style="color:#1e3a8a;text-decoration:none;font-weight:600;">STRAT</a>.
</div>
</div>
</div
HTML;
$pg = find_page("/home");
$pg->title->value = " ";
$pg->body->value = $text;
$pg->body->format = 'full_html';
$pg->save();
'''
open("tmp.php","w").write(cmd_def + cmd1)
os.system("vendor/bin/drush php:script tmp.php")
# os.system("vendor/bin/drush php:eval '" + cmd_def + cmd1 + "'")
os.system("vendor/bin/drush cr")