Skip to content

Commit f7f6e6b

Browse files
authored
Merge pull request #92 from FriendsOfREDAXO/cb-3
Installation und Deinstallation überarbeitet
2 parents 0d144d5 + 0e4e051 commit f7f6e6b

8 files changed

+311
-52
lines changed

install.php

Lines changed: 58 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,87 +2,112 @@
22

33
namespace FriendsOfRedaxo\Neues;
44

5+
use FriendsOfRedaxo\Neues\Cronjob\Publish;
56
use rex;
67
use rex_addon;
7-
use rex_article;
88
use rex_config;
99
use rex_file;
1010
use rex_media;
1111
use rex_media_service;
1212
use rex_path;
1313
use rex_sql;
1414
use rex_yform_manager_table_api;
15+
use Url\Cache;
16+
use Url\Profile;
1517

16-
use function count;
18+
/** @var rex_addon $this */
1719

1820
$sql = rex_sql::factory();
1921

20-
/* Tablesets aktualisieren */
21-
if (rex_plugin::get('yform', 'manager')->isAvailable()) {
22-
rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json'));
22+
/**
23+
* Tablesets aktualisieren
24+
* - Datenbanktabellen anlegen bzw. das Schema aktualisieren
25+
* - YForm-Tablesets eintragen bzw. aktualisieren (soweit das möglich ist)
26+
* - bei vorhandenen Datensätzen ggf. leere UUIDs füllen.
27+
*/
28+
$this->includeFile(__DIR__ . '/install/update_scheme.php');
2329

24-
// Vorhandene leere UUID-Felder aktualisieren
25-
$sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
26-
$sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
27-
$sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
30+
rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json', '[]'));
2831

29-
require_once __DIR__ . '/install/update_scheme.php';
30-
}
32+
$sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
33+
$sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
34+
$sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
3135

32-
if (null === rex_media::get('neues_entry_fallback_image.png')) {
33-
rex_file::copy(__DIR__ . '/install/neues_entry_fallback_image.png', rex_path::media('neues_entry_fallback_image.png'));
36+
/**
37+
* Fallback-Image bereitstellen falls noch nicht in der Mediathek.
38+
*/
39+
$fallbackImage = 'neues_entry_fallback_image.png';
40+
if (null === rex_media::get($fallbackImage)) {
41+
rex_file::copy(__DIR__ . '/install/' . $fallbackImage, rex_path::media($fallbackImage));
3442
$data = [];
3543
$data['title'] = 'Aktuelles - Fallback-Image';
3644
$data['category_id'] = 0;
3745
$data['file'] = [
38-
'name' => 'neues_entry_fallback_image.png',
39-
'path' => rex_path::media('neues_entry_fallback_image.png'),
46+
'name' => $fallbackImage,
47+
'path' => rex_path::media($fallbackImage),
4048
];
4149

4250
rex_media_service::addMedia($data, false);
4351
}
4452

45-
/* Cronjob installieren */
46-
if (rex_addon::get('cronjob')->isAvailable()) {
47-
$cronjobPublish = 'FriendsOfRedaxo\\Neues\\Cronjob\\Publish';
53+
/**
54+
* für nachfolgende $this->includeFile.
55+
*/
56+
$subScriptParams = ['sql' => $sql, 'installUser' => 'neues'];
4857

58+
/**
59+
* Optional: Cronjob installieren falls das Cronjob-Addon aktiviert ist.
60+
*/
61+
if (rex_addon::get('cronjob')->isAvailable()) {
4962
/**
5063
* ggf Update von früheren Versionen mit dem alten Klassennamen
5164
* -> rex_cronjob_neues_publish ändern in FriendsOfRedaxo\Neues\Cronjob\Publish.
5265
*/
5366
$sql->setTable(rex::getTable('cronjob'));
54-
$sql->setValue('type', $cronjobPublish);
67+
$sql->setValue('type', Publish::class);
5568
$sql->setWhere('`type` = :class', [':class' => 'rex_cronjob_neues_publish']);
5669
$sql->update();
5770

5871
/**
5972
* Fehlenden CronJob eintragen.
6073
*/
61-
$sql = rex_sql::factory();
6274
$sql->setTable(rex::getTable('cronjob'));
63-
$sql->setWhere('`type` = :class', [':class' => $cronjobPublish]);
75+
$sql->setWhere('`type` = :class', [':class' => Publish::class]);
6476
$sql->select();
6577

6678
if (0 === $sql->getRows()) {
67-
$query = rex_file::get(__DIR__ . '/install/rex_cronjob_neues_publish.sql');
68-
rex_sql::factory()->setQuery($query);
79+
$this->includeFile(__DIR__ . '/install/cronjob_publish.php', $subScriptParams);
6980
}
7081
}
7182

72-
/* URL-Profile installieren */
83+
/**
84+
* Optional: URL-Profile installieren falls das Url-Addon aktiviert ist
85+
* Nach einer erfolgreichen Installation wird in der Config ein Flag gesetzt
86+
* um eine erneute Installation zu vermeiden
87+
* (rex_config::set('neues', 'url_profile', true)).
88+
*/
7389
if (rex_addon::get('url')->isAvailable()) {
7490
if (false === rex_config::get('neues', 'url_profile', false)) {
75-
$rex_neues_category = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_category'"));
76-
if (0 < count($rex_neues_category)) {
77-
$query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_category.sql'));
78-
rex_sql::factory()->setQuery($query);
91+
$urlProfileTable = rex::getTable(Profile::TABLE_NAME);
92+
// Category
93+
$sql->setTable($urlProfileTable);
94+
$sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_category']);
95+
$sql->select();
96+
if (0 === $sql->getRows()) {
97+
$this->includeFile(__DIR__ . '/install/url_profile_category.php', $subScriptParams);
7998
}
80-
$rex_neues_entry = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_entry'"));
81-
if (0 < count($rex_neues_entry)) {
82-
$query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_entry.sql'));
83-
rex_sql::factory()->setQuery($query);
99+
100+
// Entry
101+
$sql->setTable($urlProfileTable);
102+
$sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_entry']);
103+
$sql->select();
104+
if (0 === $sql->getRows()) {
105+
$this->includeFile(__DIR__ . '/install/url_profile_entry.php', $subScriptParams);
84106
}
85-
/* URL-Profile wurden bereits einmal installiert, daher nicht nochmals installieren und Entwickler-Einstellungen respektieren */
107+
108+
Cache::deleteProfiles();
109+
110+
// URL-Profile als installiert markieren
86111
rex_config::set('neues', 'url_profile', true);
87112
}
88113
}

install/cronjob_publish.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/**
4+
* Job "Publish" konfigurieren.
5+
*
6+
* @var rex_sql $sql Kommt aus dem aufrufenden install.php
7+
* @var string $installUser Kommt aus dem aufrufenden install.php
8+
*/
9+
10+
use FriendsOfRedaxo\Neues\Cronjob\Publish;
11+
12+
$job_intervall = [
13+
'minutes' => 'all',
14+
'hours' => 'all',
15+
'days' => 'all',
16+
'weekdays' => 'all',
17+
'month' => 'all',
18+
];
19+
20+
$timestamp = rex_cronjob_manager_sql::calculateNextTime($job_intervall);
21+
22+
$sql->setTable(rex::getTable('cronjob'));
23+
$sql->setValue('name', '[neues] Geplante Beiträge veröffentlichen');
24+
$sql->setValue('description', 'Veröffentlicht alle Beiträge (status = 1), deren Status geplant (status = 0) ist und deren Veröffentlichungszeitpunkt erreicht wurde (publishdate < now()).');
25+
$sql->setValue('type', Publish::class);
26+
$sql->setValue('parameters', '[]');
27+
$sql->setValue('interval', json_encode($job_intervall));
28+
$sql->setValue('nexttime', rex_sql::datetime($timestamp));
29+
$sql->setValue('environment', '|frontend|backend|script|');
30+
$sql->setValue('execution_moment', 0);
31+
$sql->setValue('execution_start', '0000-00-00 00:00:00');
32+
$sql->setValue('status', 1);
33+
$sql->addGlobalUpdateFields($installUser);
34+
$sql->addGlobalCreateFields($installUser);
35+
$sql->insert();

install/rex_cronjob_neues_publish.sql

Lines changed: 0 additions & 4 deletions
This file was deleted.

install/rex_url_profile_neues_category.sql

Lines changed: 0 additions & 4 deletions
This file was deleted.

install/rex_url_profile_neues_entry.sql

Lines changed: 0 additions & 4 deletions
This file was deleted.

install/url_profile_category.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
/**
4+
* URL-Addon-Profil für Category.
5+
*
6+
* @var rex_sql $sql
7+
* @var string $installUser Kommt aus dem aufrufenden install.php
8+
*/
9+
10+
$sql->setTable(rex::getTable('url_generator_profile'));
11+
$sql->setValue('namespace', 'neues-category-id');
12+
$sql->setValue('article_id', rex_article::getSiteStartArticleId());
13+
$sql->setValue('clang_id', 1);
14+
$sql->setValue('ep_pre_save_called', 0);
15+
$sql->setValue('table_name', '1_xxx_rex_neues_category');
16+
$sql->setValue('table_parameters', json_encode([
17+
'column_id' => 'id',
18+
'column_clang_id' => '',
19+
'restriction_1_column' => 'status',
20+
'restriction_1_comparison_operator' => '>',
21+
'restriction_1_value' => '0',
22+
'restriction_2_logical_operator' => '',
23+
'restriction_2_column' => '',
24+
'restriction_2_comparison_operator' => '=',
25+
'restriction_2_value' => '',
26+
'restriction_3_logical_operator' => '',
27+
'restriction_3_column' => '',
28+
'restriction_3_comparison_operator' => '=',
29+
'restriction_3_value' => '',
30+
'column_segment_part_1' => 'name',
31+
'column_segment_part_2_separator' => '/',
32+
'column_segment_part_2' => '',
33+
'column_segment_part_3_separator' => '/',
34+
'column_segment_part_3' => '',
35+
'relation_1_column' => '',
36+
'relation_1_position' => 'BEFORE',
37+
'relation_2_column' => '',
38+
'relation_2_position' => 'BEFORE',
39+
'relation_3_column' => '',
40+
'relation_3_position' => 'BEFORE',
41+
'append_user_paths' => '',
42+
'append_structure_categories' => '0',
43+
'column_seo_title' => 'name',
44+
'column_seo_description' => '',
45+
'column_seo_image' => '',
46+
'sitemap_add' => '1',
47+
'sitemap_frequency' => 'weekly',
48+
'sitemap_priority' => '0.5',
49+
'column_sitemap_lastmod' => '',
50+
]));
51+
$sql->setValue('relation_1_table_name', '');
52+
$sql->setValue('relation_1_table_parameters', '[]');
53+
$sql->setValue('relation_2_table_name', '');
54+
$sql->setValue('relation_2_table_parameters', '[]');
55+
$sql->setValue('relation_3_table_name', '');
56+
$sql->setValue('relation_3_table_parameters', '[]');
57+
$sql->addGlobalCreateFields($installUser);
58+
$sql->addGlobalUpdateFields($installUser);
59+
$sql->insert();

install/url_profile_entry.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
/**
4+
* URL-Addon-Profil für Entry.
5+
*
6+
* @var rex_sql $sql
7+
* @var string $installUser Kommt aus dem aufrufenden install.php
8+
*/
9+
$sql->setTable(rex::getTable('url_generator_profile'));
10+
$sql->setValue('namespace', 'neues-entry-id');
11+
$sql->setValue('article_id', rex_article::getSiteStartArticleId());
12+
$sql->setValue('clang_id', 1);
13+
$sql->setValue('ep_pre_save_called', 0);
14+
$sql->setValue('table_name', '1_xxx_rex_neues_entry');
15+
$sql->setValue('table_parameters', json_encode([
16+
'column_id' => 'id',
17+
'column_clang_id' => '',
18+
'restriction_1_column' => 'status',
19+
'restriction_1_comparison_operator' => '>',
20+
'restriction_1_value' => '0',
21+
'restriction_2_logical_operator' => '',
22+
'restriction_2_column' => '',
23+
'restriction_2_comparison_operator' => '=',
24+
'restriction_2_value' => '',
25+
'restriction_3_logical_operator' => '',
26+
'restriction_3_column' => '',
27+
'restriction_3_comparison_operator' => '=',
28+
'restriction_3_value' => '',
29+
'column_segment_part_1' => 'name',
30+
'column_segment_part_2_separator' => '/',
31+
'column_segment_part_2' => '',
32+
'column_segment_part_3_separator' => '/',
33+
'column_segment_part_3' => '',
34+
'relation_1_column' => '',
35+
'relation_1_position' => 'BEFORE',
36+
'relation_2_column' => '',
37+
'relation_2_position' => 'BEFORE',
38+
'relation_3_column' => '',
39+
'relation_3_position' => 'BEFORE',
40+
'append_user_paths' => '',
41+
'append_structure_categories' => '0',
42+
'column_seo_title' => 'name',
43+
'column_seo_description' => 'teaser',
44+
'column_seo_image' => 'image',
45+
'sitemap_add' => '1',
46+
'sitemap_frequency' => 'daily',
47+
'sitemap_priority' => '0.7',
48+
'column_sitemap_lastmod' => 'updatedate',
49+
]));
50+
$sql->setValue('relation_1_table_name', '');
51+
$sql->setValue('relation_1_table_parameters', '[]');
52+
$sql->setValue('relation_2_table_name', '');
53+
$sql->setValue('relation_2_table_parameters', '[]');
54+
$sql->setValue('relation_3_table_name', '');
55+
$sql->setValue('relation_3_table_parameters', '[]');
56+
$sql->addGlobalCreateFields($installUser);
57+
$sql->addGlobalUpdateFields($installUser);
58+
$sql->insert();

0 commit comments

Comments
 (0)