/**
  * Update accountsStorage
  *
  * @param array $_data
  * @return void
  */
 protected function _updateAccountsStorage($_data)
 {
     $originalBackend = Tinebase_User::getConfiguredBackend();
     $newBackend = $_data['backend'];
     Tinebase_User::setBackendType($_data['backend']);
     $config = isset($_data[$_data['backend']]) ? $_data[$_data['backend']] : $_data;
     Tinebase_User::setBackendConfiguration($config, null, true);
     Tinebase_User::saveBackendConfiguration();
     if ($originalBackend != $newBackend && $this->isInstalled('Addressbook') && $originalBackend == Tinebase_User::SQL) {
         Setup_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " Switching from {$originalBackend} to {$newBackend} account storage");
         try {
             $db = Setup_Core::getDb();
             $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction($db);
             $this->_migrateFromSqlAccountsStorage();
             Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId);
         } catch (Exception $e) {
             Tinebase_TransactionManager::getInstance()->rollBack();
             Setup_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' ' . $e->getMessage());
             Setup_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' ' . $e->getTraceAsString());
             Tinebase_User::setBackendType($originalBackend);
             Tinebase_User::saveBackendConfiguration();
             throw $e;
         }
     }
 }
 /**
  * delete backend config
  */
 public function testDeleteBackendConfiguration()
 {
     Tinebase_User::setBackendType(Tinebase_User::LDAP);
     $key = 'host';
     Tinebase_User::setBackendConfiguration('configured-host', $key);
     Tinebase_User::deleteBackendConfiguration($key);
     $this->assertEquals('default-host', Tinebase_User::getBackendConfiguration($key, 'default-host'));
     $configOptionsCount = count(Tinebase_User::getBackendConfiguration());
     Tinebase_User::deleteBackendConfiguration('non-existing-key');
     $this->assertEquals($configOptionsCount, count(Tinebase_User::getBackendConfiguration()));
     $this->assertTrue($configOptionsCount > 0, 'user backend config should be not empty');
     Tinebase_User::deleteBackendConfiguration();
     $this->assertTrue(count(Tinebase_User::getBackendConfiguration()) == 0, 'should be empty: ' . print_r(Tinebase_User::getBackendConfiguration(), TRUE));
 }
 /**
  * update to 2.3
  * - move accounts storage configuration from config.inc.php to config db table
  * - changed the way the configuration for default user group name and default admin group name is stored
  *  
  */
 public function update_2()
 {
     $config = Setup_Controller::getInstance()->getConfigData();
     if (!empty($config['accounts'])) {
         if (empty($config['accounts']['backend'])) {
             $config['accounts']['backend'] = 'Sql';
         }
         $backendType = ucfirst($config['accounts']['backend']);
         Tinebase_User::setBackendType($backendType);
         //add default settings
         $defaultConfig = Tinebase_User::getBackendConfigurationDefaults($backendType);
         Tinebase_User::setBackendConfiguration($defaultConfig);
         //override default settings with config.inc.php settings
         if (!empty($config['accounts'][$config['accounts']['backend']])) {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Setting config: ' . print_r($config['accounts'][$config['accounts']['backend']], TRUE));
             }
             Tinebase_User::setBackendConfiguration($config['accounts'][$config['accounts']['backend']]);
         }
         //delete old config settings from config.inc.php
         unset($config['accounts']);
     }
     $defaultUserGroupName = Tinebase_Config::getInstance()->get('Default User Group', 'Users');
     $defaultAdminGroupName = Tinebase_Config::getInstance()->get('Default Admin Group', 'Administrators');
     Tinebase_User::setBackendConfiguration($defaultUserGroupName->value, Tinebase_User::DEFAULT_USER_GROUP_NAME_KEY);
     Tinebase_User::setBackendConfiguration($defaultAdminGroupName->value, Tinebase_User::DEFAULT_ADMIN_GROUP_NAME_KEY);
     //write changes to config table
     Tinebase_User::saveBackendConfiguration();
     Tinebase_Config::getInstance()->delete('Default User Group');
     Tinebase_Config::getInstance()->delete('Default Admin Group');
     $this->setApplicationVersion('Tinebase', '2.3');
 }