rosavox/source/services/doc.php
2025-05-27 10:14:53 +02:00

302 lines
8.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace rosavox\services\doc;
require_once('helpers/string.php');
require_once('helpers/misc.php');
require_once('entities/doc.php');
require_once('repositories/doc.php');
/**
*/
function name(int $id) : string
{
return \sprintf('doc-%04u', $id);
}
/**
*/
function readable_path(int $id) : string
{
return \sprintf('docs/%s.md', name($id));
}
/**
*/
function audible_path(int $id) : string
{
return \sprintf('docs/%s.oga', name($id));
}
/**
*/
function generate_readable(int $id, \rosavox\entities\doc\entity $doc) : void
{
$markdown = \rosavox\helpers\string_\coin(
"# {{value_title}}
## {{label_authors}}
{{value_authors}}
## {{label_content}}
{{value_content}}
{{macro_reasoning}}",
[
'label_title' => \rosavox\helpers\misc\translate('domain.doc.title'),
'value_title' => $doc->title,
'label_authors' => \rosavox\helpers\misc\translate('domain.doc.authors'),
'value_authors' => \implode(
"\n",
\array_map(
fn ($author) => \rosavox\helpers\string_\coin(
'- {{author}}',
[
'author' => $author,
]
),
$doc->authors
)
),
'label_content' => \rosavox\helpers\misc\translate('domain.doc.content'),
'value_content' => $doc->content,
'macro_reasoning' => (
($doc->reasoning === null)
?
''
:
\rosavox\helpers\string_\coin(
"
## {{label_reasoning}}
{{value_reasoning}}",
[
'label_reasoning' => \rosavox\helpers\misc\translate('domain.doc.reasoning'),
'value_reasoning' => $doc->reasoning,
]
)
)
]
);
\file_put_contents(
readable_path($id),
$markdown
);
}
/**
*/
function remove_readable(int $id) : void
{
$path = readable_path($id);
if (! \file_exists($path))
{
// do nothing
}
else
{
\unlink($path);
}
}
/**
*/
function generate_audible(int $id, \rosavox\entities\doc\entity $doc) : void
{
$pause = " .\n";
$text = \rosavox\helpers\string_\coin(
"{{value_title}}{{pause}}{{label_authors}}: {{value_authors}}{{pause}}{{label_content}}: {{value_content}}{{macro_reasoning}}",
[
'pause' => $pause,
'label_title' => \rosavox\helpers\misc\translate('domain.doc.title'),
'value_title' => $doc->title,
'label_authors' => \rosavox\helpers\misc\translate('domain.doc.authors'),
'value_authors' => \implode($pause, $doc->authors),
'label_content' => \rosavox\helpers\misc\translate('domain.doc.content'),
'value_content' => $doc->content,
'macro_reasoning' => (
($doc->reasoning === null)
?
''
:
\rosavox\helpers\string_\coin(
"{{pause}}{{label_reasoning}}: {{value_reasoning}}",
[
'pause' => $pause,
'label_reasoning' => \rosavox\helpers\misc\translate('domain.doc.reasoning'),
'value_reasoning' => $doc->reasoning,
]
)
)
]
);
\rosavox\helpers\misc\generate_audio(
$text,
audible_path($id),
[
'blocking' => false,
]
);
}
/**
*/
function remove_audible(int $id) : void
{
$path = audible_path($id);
if (! \file_exists($path))
{
// do nothing
}
else
{
\unlink($path);
}
}
/**
*/
function dump() : array
{
return \rosavox\repositories\doc\repo::get_instance()->list_();
}
/**
*/
function get(int $id) : \rosavox\entities\doc\entity
{
return \rosavox\repositories\doc\repo::get_instance()->read($id);
}
/**
*/
function add(\rosavox\entities\doc\entity $doc) : int
{
$id = \rosavox\repositories\doc\repo::get_instance()->create($doc);
generate_readable($id, $doc);
generate_audible($id, $doc);
return $id;
}
/**
*/
function add_examples() : void
{
$entities = [
/*
new \rosavox\entities\doc\entity(
'Freibier bei Parteitagen',
[
'Björn Biernot',
'Doreen Dauerdurst',
],
'Der Landesverband möge beschließen, dass zu Beginn eines jeden Parteitags für jeden Deligierten mindestens zwei Flaschen Bier auf den zugehörigen Platz zu stellen sind.',
'Wir haben Durst!',
),
new \rosavox\entities\doc\entity(
'Götterdämmerung',
[
'Fenriswolf',
],
'Der Allvater hat mich betrogen. Ich werde ihn und seine elende Asenbrut verschlingen. Diese Welt wird enden.',
null,
),
*/
// F.6
/*
new \rosavox\entities\doc\entity(
'Rollback zur Kostenübernahme von Übernachtungen für Landesparteitage',
[
'Ina Richter',
'Sabine Schilka',
'Peter Kroh',
],
'Der Landesparteitag der Linken Sachsen möge Folgendes beschließen: Der Landesparteitag beschließt, dass die Kosten für die Übernachtungen bis auf Weiteres wieder durch den Landesverband zu tragen sind.',
"Die Landesparteitage werden durch den Landesverband sowohl inhaltlich als auch organisatorisch vorbereitet, wofür die Kreisverbände dankbar sind. Die Änderung der Kostenaufteilung für die Übernachtungen sehen wir jedoch kritisch.\n1. Die Kreisverbände verfügen über sehr unterschiedliche begrenzte finanzielle Mittel, die vorrangig für lokale Parteiarbeit, Bürostruktur und die Mitgliederbetreuung eingesetzt werden sollten. Die Übernahme der Übernachtungskosten durch den Landesverband würde dazu beitragen, die Kreisverbände finanziell zu entlasten und ihnen mehr Spielraum für regionale Initiativen zu geben, zumal wir seit der letzten Landtagswahl über weniger Landtagsabgeordnete verfügen, die die Kreise unterstützen könnten.\n2. Ein zentrales Einholen von Angeboten, Vertragsabschluss und Abrechnung durch den Landesverband vereinfacht die Organisation und Verwaltung von Kosten. Dadurch wird die bürokratische Belastung der Kreisverbände erheblich reduziert.\n3. Durch die landesweite Übernahme der Übernachtungskosten wird sichergestellt, dass alle Mitglieder unabhängig von der finanziellen Lage ihres Kreisverbands gleichermaßen unterstützt werden. Dies verhindert Ungleichheiten und stellt sicher, dass alle Mitglieder bei überregionalen Veranstaltungen unter gleichen Bedingungen teilnehmen können.\n4. Der Landesverband hat häufig bessere Möglichkeiten, Kosten zu bündeln und Übernachtungen kostengünstiger zu organisieren. Eine zentrale Verwaltung kann durch Rahmenverträge mit Hotels oder Tagungshäusern zu Einsparungen führen, die den gesamten Verband finanziell entlasten."
),
*/
// C.7
new \rosavox\entities\doc\entity(
'C.7: Gegen die Militarisierung von Industriestandorten in Sachsen',
[
'Agnes Descher',
'Fabrice Franke',
'Alice Schubert',
'Petra Rank',
],
"Der Landesparteitag der Linken Sachsen möge Folgendes beschließen:\n\nDer Landesverband Die Linke Sachsen setzt sich entschieden gegen die weitere Militarisierung von Industriestandorten in Sachsen ein.",
"Das Interesse der Rüstungskonzerne sich auf freien Gewerbeflächen anzusiedeln oder die Übernahme von Werken der Autoindustrie, die derzeit in einer Krise steckt, ist auch in Sachsen immer mehr Thema in den Kommunen und Kreisen.\nEs ist keine Lösung zur Sicherung von Arbeitsplätzen in der Industrie auf Waffenproduktion zu setzen. Es gibt andere Alternativen, wie nachhaltige zivile Produktion sowie eine sozialökologische Transformation.\nMit dem Antrag wollen wir, dass sich Die Linke Sachsen entschieden gegen eine Militarisierung der Industriestandorte in Sachsen einsetzt und sich auf Landes-, Kreis- und Kommunalebene gegen diese Entwicklung stellt.\nMit der Ansiedlung von Rüstungsindustrie und der damit verbundenen weiteren Aufrüstung wird keine nachhaltige Arbeitsmarktpolitik und eine sichere Welt geschaffen. Das müssten wir aus der Geschichte gelernt haben."
),
// F.4
new \rosavox\entities\doc\entity(
'F.4: Satzungsänderung: Jugend fördern heißt Zukunft sichern!',
[
'linksjugend Sachsen',
],
"Der Landesparteitag der Linken Sachsen möge folgende Ergänzung der Landessatzung beschließen:\nErgänze in § 11 (5) \"Organe und Aufgaben der Kreisverbände\" folgenden Text:\nKreisverbände, in denen Basisgruppen der linksjugend [´solid] existieren, müssen diesen ausreichend finanzielle Mittel zur Verfügung stellen. Diese dürfen darüber frei entscheiden, ohne vorherige Genehmigung des Kreisverbandes. Sollte es in den Kreisen keine Basisgruppen der linksjugend [´solid] geben, so entfällt diese Pflicht.",
"(erfolgt mündlich)"
),
];
foreach ($entities as $entity)
{
add($entity);
}
}
/**
*/
function change(int $id, \rosavox\entities\doc\entity $doc) : void
{
\rosavox\repositories\doc\repo::get_instance()->update($id, $doc);
remove_readable($id);
remove_audible($id);
generate_readable($id, $doc);
generate_audible($id, $doc);
}
/**
*/
function remove(int $id) : void
{
\rosavox\repositories\doc\repo::get_instance()->delete($id);
remove_readable($id);
remove_audible($id);
}
/**
*/
function init() : void
{
\rosavox\repositories\doc\repo::get_instance()->setup();
if (empty(dump()))
{
add_examples();
}
else
{
// do nothing
}
}
?>