Skip to content

Commit 5b4bab6

Browse files
committed
Merge branch 'pu/pm/CreatePersonalFolderOnInstallOnReplicaPrimary' into '2024.11'
tweak(TB/Setup) create personal folders for all users on install of app on replica primaries See merge request tine20/tine20!5379
2 parents 5b5d11b + 34d68cd commit 5b4bab6

File tree

6 files changed

+45
-5
lines changed

6 files changed

+45
-5
lines changed

tine20/Felamimail/Setup/Update/Release11.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function update_0()
7979
*/
8080
public function update_1()
8181
{
82-
if (Tinebase_Core::isReplicationMaster()) {
82+
if (!Tinebase_Core::isReplica()) {
8383
$basepath = Tinebase_FileSystem::getInstance()->getApplicationBasePath(
8484
'Felamimail',
8585
Tinebase_FileSystem::FOLDER_TYPE_SHARED

tine20/OnlyOfficeIntegrator/Setup/Initialize.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function addMissingInitializeCF()
2626
protected function _initializeQuarantine()
2727
{
2828
// this is only done on primary and then replicated to the secondaries
29-
if (!Tinebase_Core::isReplicationPrimary()) {
29+
if (Tinebase_Core::isReplica()) {
3030
return;
3131
}
3232

tine20/OnlyOfficeIntegrator/Setup/Update/1.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public function update005()
9797
public function update006()
9898
{
9999
// this is only done on primary and then replicated to the secondaries
100-
if (Tinebase_Core::isReplicationPrimary()) {
100+
if (!Tinebase_Core::isReplica()) {
101101
$group = Tinebase_Group::getInstance()->create(new Tinebase_Model_Group([
102102
'name' => 'OnlyOfficeIntegratorQuarantine'
103103
]));

tine20/Setup/Controller.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2184,6 +2184,39 @@ protected function _installApplication(SimpleXMLElement $_xml, $_options = null)
21842184
}
21852185

21862186
if (Tinebase_Config::APP_NAME !== $application->name) {
2187+
2188+
// create personal folders for all users to replicate them to the replicas
2189+
if (Tinebase_Core::isReplicationPrimary()) {
2190+
$allUsers = null;
2191+
$createdModels = [];
2192+
$appCtrl = Tinebase_Core::getApplicationInstance($application->name, '', true);
2193+
if ($appCtrl instanceof Tinebase_Application_Container_Interface) {
2194+
$allUsers = Tinebase_User::getInstance()->getFullUsers();
2195+
foreach ($allUsers as $user) {
2196+
/** @var Tinebase_Model_Container $container */
2197+
foreach($appCtrl->createPersonalFolder($user) as $container) {
2198+
$createdModels[$container->model] = true;
2199+
}
2200+
}
2201+
}
2202+
foreach ($appCtrl->getModels() as $model) {
2203+
if (isset($createdModels[$model])) {
2204+
continue;
2205+
}
2206+
/** @var Tinebase_Record_Interface $model */
2207+
$modelCtrl = Tinebase_Core::getApplicationInstance($application->name, $model, true);
2208+
if ($modelCtrl instanceof Tinebase_Controller_Record_Interface)
2209+
if (($mc = $model::getConfiguration()) && $mc->hasPersonalContainer) {
2210+
if (null === $allUsers) {
2211+
$allUsers = Tinebase_User::getInstance()->getFullUsers();
2212+
}
2213+
foreach ($allUsers as $user) {
2214+
Tinebase_Container::getInstance()->createDefaultContainer($model, $application->name, $user);
2215+
}
2216+
}
2217+
}
2218+
}
2219+
21872220
foreach (Tinebase_Application::getInstance()->getApplications() as $app) {
21882221
if ($app->name === $application->name) continue;
21892222

tine20/Tinebase/Config.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,8 @@ class Tinebase_Config extends Tinebase_Config_Abstract
812812
*/
813813
const REPLICATION_USER_PASSWORD = 'replicationUserPassword';
814814

815+
const REPLICATION_IS_PRIMARY = 'replicationIsPrimary';
816+
815817
/**
816818
* @var string
817819
*/
@@ -1366,7 +1368,10 @@ class Tinebase_Config extends Tinebase_Config_Abstract
13661368
'content' => array(
13671369
self::REPLICATION_USER_PASSWORD => array(
13681370
'type' => Tinebase_Config::TYPE_STRING
1369-
)
1371+
),
1372+
self::REPLICATION_IS_PRIMARY => [
1373+
self::TYPE => self::TYPE_BOOL
1374+
],
13701375
),
13711376
),
13721377
self::REPLICATION_SLAVE => array(

tine20/Tinebase/Core.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2514,11 +2514,13 @@ public static function isReplicationSlave()
25142514
}
25152515

25162516
/**
2517+
* attention, this will not be true on non replicating system! use if (!isReplica()) instead!
2518+
*
25172519
* @return bool
25182520
*/
25192521
public static function isReplicationPrimary()
25202522
{
2521-
return static::isReplicationMaster();
2523+
return (bool)Tinebase_Config::getInstance()->{Tinebase_Config::REPLICATION_MASTER}->{Tinebase_Config::REPLICATION_IS_PRIMARY};
25222524
}
25232525

25242526
/**

0 commit comments

Comments
 (0)